Frage 1 : Kann ich einfach die $userid = mysql_real_escape_string($_GET['user_id']);
Oder ist es besser, die folgenden Codes zu verwenden?
function mysql_prep( $value ){
$magic_quotes_active = get_magic_quotes_gpc();
$new_enough_php = function_exists( "mysql_real_escape_string" ); //example. php >= v4.3.0
if( $new_enough_php ) { //php v4.30 or higher, undo any magic quote effects so mysql_real_escape_string can do the work
if( $magic_quotes_active ) { $value = stripslashes( $value );}
$value = mysql_real_escape_string( $value );
} else { //before php v4.3.0.
if( !$magic_quotes_active ) { $value = addslashes( $value ); }
}
return $value;
}
$userid = trim(mysql_prep($_GET['user_id']));
Frage 2: Müssen wir wirklich die md5()
o shal()
über die $_SESSION['user_id']
? Warum brauchen wir das? Der Sitzungsentführer kann nur die Sitzungs-ID bekommen, aber nicht den Wert der Sitzungsvariablen, richtig? Wenn ja, dann brauche ich den Wert der Sitzungsvariablen nicht zu hashen. $_SESSION['user_id']
nicht mehr richtig? Zum Beispiel:
if (isset($_POST['login'])) {
if ($username==$user_username_in_db && $hashed_password==$user_password_in_db) {
$_SESSION['user_id'] = sha1($user_id_in_db); //sha1 convert userid to crazy long characters
}
}
$query2 = "SELECT id FROM user WHERE sha1(id)='{$userid}' LIMIT 1";
Frage 3: Da php-Session-Hijacking vorkommt und ich es mir nicht leisten kann, SSL/HTTPS zu verwenden, fordere ich den Benutzer auf der Website auf, jedes Mal sein Passwort einzugeben, wenn er versucht, eine Nachricht oder einen Freund zu löschen, denn der Session-Hijacker könnte sich als der Benutzer ausgeben, um seine Nachrichten/Freunde zu löschen. Kann ich wissen, ob es gefährlich ist, wenn meine Website den Benutzer immer zur Eingabe des Passworts auffordert? Das Passwort ist dann leichter zu hacken? Darf ich wissen, dass der Sitzungs-Hijacker sich nur als Benutzer ausgeben kann, aber nicht das Passwort des Benutzers stehlen kann?