Authentifizierung via PHP
Maresa
- php
Hallo,
ich habe ein Php Script geschrieben, welches eine Website PAsswort schützen soll.
Auf der Startseite der Website befindet sich ein Formular, welches die INPUT Felder benutzername und passwort beinhaltet. Beim klick auf senden wird an folgendes Script weitergeleitet:
-------------------------------------------------------------------
// eigene Funktionen einbinden
require('lib.inc.php');
// Übermittelte POST Werte in Variabeln schreiben
$benutzername = $_POST['benutzername'];
$passwort = $_POST['passwort'];
// Überprüfen, ob in den Feldern Benutzername und Passwort auch was eingegeben worden ist
if ($benutzername != "" && $passwort != "") {
connect();
// Überprüfen, ob User in DB eingetragen ist
$query_return = query("SELECT gruppe, userID FROM user WHERE benutzername = '$benutzername' AND passwort = '$passwort'");
// Wurde ein Datensatz mit der richtigen Benutzername/Passwort Kombination gefunden...
if (mysql_affected_rows() > 0) {
// ...Varibeln in Session registrieren
$query_array = mysql_fetch_array($query_return);
$gruppe = $query_array["gruppe"];
$userID = $query_array["userID"];
session_start("PHPSESSID");
session_register("gruppe");
session_register("userID");
}
}
---------------------------------------------------------------------
Ich bekomme nun immer die Hinweis Meldung:
Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0
Woran liegt daS? Habe ich eine Variable falsch registriert?
Funktionierer tut alles, es kommt nur eben immer dieser Hinweis.
Woran liegt das?
Wie kann ich den Fehler beheben?
Vielen Dank
Maresa
Holladiewaldfee,
session_start("PHPSESSID");
session_register("gruppe");
session_register("userID");
Ich glaube, er will Dir sagen, Du sollst lieber mit $_SESSION arbeiten als mit session_register und globalen Variablen?!
Ciao,
Harry
Hi Harry,
wie sicher ist so eine Loesung?
Ich probiere grade auch so etwas fuer ein kleines Tool, das nur aus einer Datei besteht (naja, die Funktionen sind ausgelagert...). Leider habe ich keine Erfahrung mit Sessions...
Mein Versuch:
$sessionName = "sessionId";
session_register("isLoggedIn");
// start session
if (!isset($HTTP_COOKIE_VARS[$sessionName])) {
$isLoggedIn = 0;
mt_srand((double) microtime() * 1000000);
$setId = md5(str_replace(".","",$REMOTE_ADDR) + mt_rand(100000, 999999));
setcookie($sessionName, $setId);
session_start();
session_name($sessionName);
session_register("isLoggedIn");
}
if (isset($HTTP_POST_VARS["user"]) && isset($HTTP_POST_VARS["pass"])) {
if ($HTTP_POST_VARS["user"] == "joachim" && $HTTP_POST_VARS["pass"] == "11111") $isLoggedIn = 1;
}
Funktionieren tuts - aber kann diese Variable "isLoggedIn" nicht irgendwie geknackt/manipuliert werden?
Gruesse Joachim
Also ich mache das in ASP so (und ein freund von mir in PHP auch), das wir per include anweisung auf jeder seite, die aufgerufen wird abfragen ob username und passwort in der db stehen.
netghost
Holladiewaldfee,
// start session
if (!isset($HTTP_COOKIE_VARS[$sessionName])) {
$isLoggedIn = 0;
mt_srand((double) microtime() * 1000000);
$setId = md5(str_replace(".","",$REMOTE_ADDR) + mt_rand(100000, 999999));
setcookie($sessionName, $setId);
Warum so kompliziert und nicht einfach session_id(); ?
if ($HTTP_POST_VARS["user"] == "joachim" && $HTTP_POST_VARS["pass"] == "11111") $isLoggedIn = 1;
Das hier ist die eigentliche Schwachstelle: Das Passwort steht im Klartext da, d.h. wenn jemand von außen Zugriff auf das Script hat - und das haben mehr Leute, als man normalerweise denkt - ist das Passwort bekannt und damit alle Sicherheit dahin.
Deswegen lieber if($_POST["user"]=="joachim" && md5($_POST["pass"])=="komischermd5hash")
Funktionieren tuts - aber kann diese Variable "isLoggedIn" nicht irgendwie geknackt/manipuliert werden?
Wenn jemand als root am Server rumhüpft, seine Session-Datei sucht und die Variable ändert, ja. Sonst: nur schwierig. Es bleibt natürlich zu bedenken, ob nicht ein PHP-Script am selben Server die Möglichkeit hat, den entsprechenden Eintrag in der Session-Datei zu manipulieren. Ergo: Wenn jemand PHP-Scripte unter der ID des Webservers ausführen kann oder als root am Server rumhüpft, dann wird die Sache unangenehm, sonst geht's schon.
Ciao,
Harry
Hi Harry,
Warum so kompliziert und nicht einfach session_id(); ?
kompliziertes Buch gelesen ;-)
if ($HTTP_POST_VARS["user"] == "joachim" && $HTTP_POST_VARS["pass"] == "11111") $isLoggedIn = 1;
Das hier ist die eigentliche Schwachstelle: Das Passwort steht im Klartext
Aha, das werde ich also auch md5 verschluesseln.
Ergo: Wenn jemand PHP-Scripte unter der ID des Webservers ausführen kann oder als root am Server rumhüpft, dann wird die Sache unangenehm, sonst geht's schon.
Das klingt ja hoffnungsvoll. Vielen Dank fuer die Tipps.
Gruesse Joachim
Hi!
Du solltest mal folgendes lesen(deutsche Manual-Version ist leider nicht aktuell):
http://www.php-faq.de/q/q-sessions-wie.html
http://www.php.net/manual/en/ref.session.php
http://www.php.net/manual/en/function.session-register.php
Verwende kein session-register!
Grüße
Andreas