Gut wenn du unbedingt möchtest...
Ich würde dir aber vorschlagen, zumindest statt Username und Passwort einen zufällig erstellten Hash zu übergeben, damit das ganze zumindest ein wenig sicherer wird (wenn sich der Hash bei jedem User auch bei jeder Verwendung ändert dann wäre das natürlich noch viel besser).
Unter der Vorraussetzung dass du das mit dem Hash machst würde ich das so machen:
0.
Erst mal von allem eine Sicherungskopie machen.
1. Füge in der prefix_users Tabelle eine Spalte namens login_hash hinzu (varchar 32 Zeichen, Default irgendwas zufälliges damit keiner auf die Idee kommt sich mit einem leeren Hash anzumelden...)
2. Trage mit deinem Skript von dem aus du weiterleitest in diese Datenbankspalte einen zufälligen Hash ein (z.b. basierend auf Zeit und Usernamen), hänge den Hash mit an die URL dran (z.b. mit uid=HASH).
Die URL sähe jetzt beispielhaft so aus:
login.php?login=true&uid=HASH&u=USERID
3. Bearbeite die Login.php (ich bleibe jetzt mal bei dem Beispiel dass die Variable uid heißt).
Suche
Code: Alles auswählen
$username = isset($HTTP_POST_VARS['username']) ? phpbb_clean_username($HTTP_POST_VARS['username']) : '';
$password = isset($HTTP_POST_VARS['password']) ? $HTTP_POST_VARS['password'] : '';
und füge danach ein:
Code: Alles auswählen
$hash = isset($HTTP_GET_VARS['uid'])? $HTTP_GET_VARS['uid'] : '';
$user_id = -1;
if($hash)
{
$user_id = isset($HTTP_GET_VARS['u']? $HTTP_GET_VARS['u'] : -1;
//hash sicher machen:
$hash = preg_replace("#[^0-9a-f]#is",'',$hash);
//User suchen:
$sql = "SELECT user_id, username, user_password, user_active, user_level, user_login_tries, user_last_login_try
FROM " . USERS_TABLE . "
WHERE login_hash='".addslashes($hash)."' AND user_id =".intval($user_id);
}
Dann diesen direkt darunter folgenden Code
Code: Alles auswählen
$sql = "SELECT user_id, username, user_password, user_active, user_level, user_login_tries, user_last_login_try
FROM " . USERS_TABLE . "
WHERE username = '" . str_replace("\\'", "''", $username) . "'";
ersetzen durch das hier:
Code: Alles auswählen
else
{
$sql = "SELECT user_id, username, user_password, user_active, user_level, user_login_tries, user_last_login_try
FROM " . USERS_TABLE . "
WHERE username = '" . str_replace("\\'", "''", $username) . "'";
}
Jetzt müssen wir noch die Passwortüberprüfung brücken:
Finde:
Code: Alles auswählen
if( md5($password) == $row['user_password'] && $row['user_active'] )
{
ersetze durch
Code: Alles auswählen
if( (md5($password) == $row['user_password'] && $row['user_active']) || ($row['user_id'] == $user_id && $hash && $row['user_active']))
{
Wenn du wirklich die
unsichere Variante der Übergabe per GET wählen willst dann brauchst du lediglich diese Stelle hier zu editieren:
Code: Alles auswählen
$username = isset($HTTP_POST_VARS['username']) ? phpbb_clean_username($HTTP_POST_VARS['username']) : '';
$password = isset($HTTP_POST_VARS['password']) ? $HTTP_POST_VARS['password'] : '';
und da zum Beispiel
Code: Alles auswählen
$username = isset($HTTP_POST_VARS['username']) ? phpbb_clean_username($HTTP_POST_VARS['username']) : (isset($HTTP_GET_VARS['username']) ? phpbb_clean_username($HTTP_GET_VARS['username']) : '');
$password = isset($HTTP_POST_VARS['password']) ? $HTTP_POST_VARS['password'] : (isset($HTTP_GET_VARS['password']) ? $HTTP_GET_VARS['password'] : '');
draus machen.
Ich rate aber klar von dieser unsicheren Variante ab