Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » PHP » PHP sicheres einloggen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.01.2011, 04:33 Uhr
Pablo
Supertux
(Operator)


Hi

ich bau mir zur Zeit eine Seite, bei der man sich einloggen kann.


Ich will:

- user geht auf login
- nach Eingabe vom richtigen User/Pass kann man die Seiten sehen und verwenden, die user-berechtigt sind.
- nach ca. 5 Minuten ohne Aktvität erfolgt eine Password Wiederholung.

Worauf muss ich achten? Und wie geh ich am besten vor?

Welche Vorteile hat man bei Session gegenüber Cookies und umgekehrt? Kann mir jemand vielleicht einen Link posten, wo ich nachschauen kann?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 18.01.2011 um 04:34 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.01.2011, 14:59 Uhr
Arzi



Also um den Loginbereich zu realisieren ist eien Session besser, da die Daten nicht auf dem Rechner des Users gespeichert werden sondern auf dem Server und der User bekommt nur ein Cookie mit dem Sessioncode, um auf die Session zugreifen zu können.
Eine Session ist dann mehr oder weniger ein Array also du kannst ganz verschiedene Daten in der Session speichern...
Ein Cookie kann immer nur 1 Wert speichern und das macht den Keks etwas star...
d.h. für den Loginbereich eine Session
und dann würde ich - wsl. nicht die beste lösung - noch ein Cookie setzen, dass 5min. gültig ist und bei jedem Seitenaufruf wird das selbe Cookie nochmal gesetzt und wenn man 5min. inaktiv ist, dann ist das Cookie weg und man muss sich wieder neu einloggen...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.01.2011, 17:16 Uhr
Pablo
Supertux
(Operator)


Hab dann 2 Fragen:

1. wenn man Cookies verbietet, dann kann PHP bei session_start den Session-Keks nicht mehr anlegen. Muss man dann bei allen Links per HAND die SID Konstante hinzufügen?


PHP 4:
<?php
    echo "<a href=\"file.php?" . SID . "&param1=1&param2=2";
?>



wie geht man da am besten vor? Was ist, wenn SID leer ist, muss man dann per Hand erkennen, dass ich "?param1=1" anstatt "&param1=1" schreibenn muss?

2. Wie macht man denn das ausloggen? Kann man die Session auch beenden, so dass der Server die Session-Datei bei sich löscht (und der Browser ggf. den Session-Keks)?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 19.01.2011 um 03:25 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.01.2011, 03:25 Uhr
Pablo
Supertux
(Operator)


Ich hab ein bisschen mit den session gespielt, aber ich verstehe etwas nicht ganz.

Ich will vor allem den Fall testen, wenn der Browser keine Cookies akzeptiert. Ich habe 2 Skripte geschrieben:

index.php

PHP 4:
<?php

/* session only to be alive for 3 Minutus */

print "<pre>\n";
print_r(session_get_cookie_params());
print "</pre>\n";

echo "Session name is " . session_name() . " see?<br />";

echo "session.use_cookies is " . ini_get("session.use_cookies") . " see?<br />\n";

$scookie = ini_get("session.use_cookies");

if($scookie)
    session_set_cookie_params(180);

session_start();

if(isset($_GET['login']) && $_GET['login'] == 1)
{
    $_SESSION['logged'] = 10;
}

if(isset($_GET['logout']) && $_GET['logout'] == 1)
{
    print "Destroying session<pre>\n";
    print_r($_SESSION);
    print "</pre>\n";

    $_SESSION['logged'] = 0;
    if($scookie)
        session_set_cookie_params(time() - 4200);
    session_destroy();
}

$nick = "";
$city = "";

if(isset($_POST['senddata']) && $_POST['senddata'] == "Post nicks")
{
    $_SESSION['POST'] = $_POST;
    $nick = $_POST['nick'];
    $city = $_POST['city'];
}

if(isset($_POST['senddata']) && $_POST['senddata'] == "Post nicks")
{
    $_SESSION['POST'] = $_POST;
    $nick = $_POST['nick'];
    $city = $_POST['city'];
}


print "<pre>\n";
print_r($_POST);
print "</pre>\n";

$ssid = htmlspecialchars(SID);



?>
<html>
<head>
<title>Session example 1</title>
</head>
<body>
<h1>Session Example <?php echo $ssid ?></h1>

<?php

if(isset($_SESSION['logged']) && $_SESSION['logged'] == 10)
{
    /* show formular and logout */
?>
<p>
<a href="index.php?logout=1<?php echo "?$ssid" ?>">logout</a>
</p>

<form action="index.php" method="post">
<input type="hidden" name="<?php echo session_name() ?>" value="<?php echo session_id() ?>" />
Nick: <input name="nick" type="text" size="30" maxlength="30" value="<?php echo $nick ?>" /><br />
City: <input name="city" type="text" size="30" maxlength="30" value="<?php echo $city ?>" /><br />
<input type="submit" name="senddata" value="Post nicks">
</form>
<?php
} else {

?>
<p>
<a href="index.php?login=1">login</a>
</p>

<?php
}
?>

</body>
</html>



und

look.php

PHP 4:
<?php

session_start();

print "SID is " . htmlspecialchars(SID) . "<br />";

print "<pre>\n";
print_r($_SESSION);
print "</pre>\n";

?>



ich weiß, kein perfekter HTML Code, aber das ist nur zum testen & debuggen.

Wenn ich Cookies erlaube, dann läuft alles super. Wenn ich auf login klicke, dann bekomme ich die Felder, ich kann die Sachen verändern und ich sehe sie bei look.php.

Wenn ich aber Cookies ablehne, dann wird eine Session nach der anderen erzeugt. Und obwohl ich überall PHPSESSID=xxx in die URLs eingebe (look.php?PHPSESSID=xxx), komme ich immer wieder auf die "login" Seite, weil die Session nicht erkannt wird. Wie soll ich in diesem Fall vorgehen?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 19.01.2011 um 03:26 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.01.2011, 03:42 Uhr
Pablo
Supertux
(Operator)


ich denke, meine PHP Konfiguration zu Hause ist nicht korrekt. Denn ich habe diese Skripte in anderen Webserver hochgeladen und cookies von diesem Server auch nicht erlaubt und bei diesem Server funktioniert es wunderbar mit PHPSESSID=.... in der URL.

Um welches Konfigparameter könnte es sich handeln?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.01.2011, 09:46 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi um automatisch die session-name&id zu links hinzuzufügen zu können muss folgendes gesetzt sein:


Code:
session.use_cookies 1 oder 0
session.use_only_cookies 0 <---- das ist wichtig
session_use_trans_sid 1    <---- das ist wichtig



weiterhin darfst du die daten nicht durch "eval"uierten code ausgeben lassen, da läuft der url-rewriter wohl nicht (mehr) - das ist auch der grund warums hier im forum nicht mehr richtig funktioniert mit den sessions.

dann kannst du die gültigkeit der session direkt per "session.cookie_lifetime" festsetzen, bzw aktualisier in der session halt einen zeitstempel den du prüfst - wenn die session zu alt ist, verwirf sie - das schützt deine session von manipulationen vom client her (wenn du cookies etc prüfst ist halt alles "client data" - der zeitstempel in einer session-var ist "server data" und daher vom client nicht manipulierbar
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
19.01.2011, 11:52 Uhr
Pablo
Supertux
(Operator)


hba nachgeschaut und bei gentoo ist die Default einstellung session.use_cookies 1, u.a. wegen session hijacking.

Was mir nicht gefällt ist, dass wenn die SID bekannt ist, kann man von überall auf die Session zugreifen und das ist mir ein Dorn im Auge, ich glaube, ich werde damit leben müssen, Cookies für die SID zu erlauben.

Wie erkennt man zuverlässig, ob die Session-Cookie nicht gesetzt werden konnte? So?


PHP 4:
<?php

if(isset($_COOKIE[session_name()]) == false)
    KEIN SESSION KEKS
?>



Wenn ich, sagen wir mal


PHP 4:
ini_set("session.cookie_lifetime", 300);



setze und kein PHP Skript (mit dieser Session) innerhalb der 300 Sekunden aufgerufen wird, ist die Session dann ungültig?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
19.01.2011, 12:56 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


joa durch das "use_only_cookies" auf "1" erzeugt php keine an links angehängte session - du könntest halt auf die remote-ip prüfen die du beim anlegen der session dir abspeicherst - oder browser info o.ä, um den user eindeutig zu identifizieren.

auf cookies zu beharren halte ich persönlich für falsch

ansonsten deine prüfung ob das cookie existiert kannst du so machen.

wie gesagt, die 300 sekunden sind halt von der gegenstelle gemacht - wenn er das cookie manipuliert, wird halt nicht ausgeloggt - daher: beim anlegen der session oder immer beim aufruf des scripts prüfen "wie alt ist meine session bereits" (über einen timestamp) und ggf invalidieren. oder eben den timestamp erneuern
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
19.01.2011, 18:00 Uhr
0xdeadbeef
Gott
(Operator)


Das mit dem Session-Hijacking ist ein etwas albernes Argument. Wenn man tatsächlich einen man-in-the-middle hat, dann kann der auch die Cookies aus dem HTTP-Request auslesen.

Ansonsten würde ich die Linkgeneration in eine Funktion auslagern und

PHP 4:
<?php
    echo "<a href=\"" . make_link("file.php?param1=1&param2=2") . "\">";
?>


o.ä. schreiben - dann läufst du nicht in Gefahr, dass nur die Hälte der Links eine Session-ID anhängen.

Apropos Hälfte der Links...auf die Gefahr hin, Flo-Soft langsam damit zu nerven, hier im Forum sind einige Links noch nicht ganz in Ordnung . Auf der Hauptseite in der Spalte "Letzte Nachricht", in den Foren hinter den Zahlen, wenn ein Thread mehr als eine Seite hat und hinter den Seitenzahlen auf den eigentlichen Threadseiten sind die, die mir aufgefallen sind. Ich helfe mir dann, indem ich die Session-ID von Hand in die URL kopiere, aber ein bisschen was nerviges hat das eigentlich schon.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ PHP ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: