Thread Session-ID wird nicht generiert (68 answers)
Opened by anamollo4music at 2013-03-26 08:23

GwenDragon
 2013-03-27 13:43
#166668 #166668
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Zwei funktionsfähige Beispiele zum Lernen, aber nicht auf Bugs getestet:

login.pl

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/perl

use strict;
use warnings;

use CGI::Session;
use CGI;

my $SIDNAME = CGI::Session->name();

my $cgi = CGI->new;
my $sid = $cgi->cookie($SIDNAME) || $cgi->param($SIDNAME) || undef;

my $session = CGI::Session->load() or die CGI::Session->errstr();
if ( $session->is_empty ) {
    $session = CGI::Session->new() or die CGI::Session->errstr();
}

if ( $session->is_expired() ) {
    print $session->header(),
        $cgi->start_html(),
        $cgi->p("Your session timed out! Refresh the webpage!"),
        $cgi->end_html();
    exit(0);
}

$sid = $session->id;

my $cookie = $cgi->cookie( -name => $SIDNAME, -value => $sid );

my $username = $cgi->param('user') || '';
my $password = $cgi->param('pwd')  || '';

if ( $username ne '1' or $password ne '1' ) {    # Loginparameter falsch
    print $session->header;
    print qq(
                <h1>Login</h1>
                <form action="?$SIDNAME=$sid" method="POST">
                <p>
                User    : <input type="text" name="user">
                <br>
                Passwort: <input type=text name="pwd">
                <br>
                <input type="submit" value="Login">
                <input type="hidden" name="$SIDNAME" value="$sid">
                </p>
                </form>
);
    exit;
}
else {    # Login ok!
    $session->param( 'user',      $username );
    $session->param( 'loggedin',  1 );
    $session->param( 'lastvisit', "" . localtime() );

    print $session->header(
        -location => "intro.pl?$SIDNAME=$sid",
        -cookie   => $cookie,
    );
}


intro.pl

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/perl

use strict;
use warnings;

use CGI;
use CGI::Session;

my $SIDNAME = CGI::Session->name();
my $cgi     = CGI->new;
my $sid     = $cgi->cookie($SIDNAME) || $cgi->param($SIDNAME) || undef;

my $session = CGI::Session->load() or die CGI::Session->errstr();

my $logged = $session->param('loggedin');
if ($logged) {
    my $user     = $session->param('user');
    my $lasttime = $session->param('lastvisit');
    print $session->header, <<HTML;
        <h1>Varry Sekret Webpadge</h1>
        <p>Hello <i>$user</i>,<br>you visited us at <tt>$lasttime</tt></p>
        <p>Pictures : <a href="http://example.org/oaioi/lil-iiii.html">of Lilly</a></p>
HTML
}
else {    # Login
    print $session->header( -location => 'login.pl' );
}


//EDIT:
Hinweis zur Sicherheit von intro.pl.
Wer die Session-ID aus dem Cookie klaut hat natürlich Zugriff, ich weiß ja nicht wie die Anforderungen sind.
Im Grund genommen müsste nochmals ein extra Wert mitgeführt werden. Wie von pq in Perlmonks:606832 erwähnt.

modedit Editiert von pq: teilbaum
Last edited: 2013-03-28 12:26:21 +0100 (CET)

View full thread Session-ID wird nicht generiert