Zugang durch passwortgeschütze Seite

Alles, was PHP betrifft, kann hier besprochen werden.

Zugang durch passwortgeschütze Seite

Postby alex123 » 22. February 2005 15:59

Liebe Kollege,

ich möchte auf einem Server ein Formular stellen, wo die Benutzer sich anmelden und nach dem Vergleich mit user-passw in der MySQL-Datenbank auf eine passwortgeschützte Seite auf einem anderen Server redirektet wurden. Da bekommen sie den Zugang nur, wenn sie aus meinem Formular sich einloggen.

Mit einer Paar user-passw funktioniert das OK. Wenn aber ich das mit anderen user-passw Paarem aus der MySQL probiere, wurde ich auf meine Error-Seite weitergeleitet.

Kann das an falschen Code in mysql-fetsch-assoc liegen?

Für die Hilfe bedanke ich mich im Voraus.

Alex.

Code: Select all
<?php
session_start();
session_register("s_username","s_userpass");
if (isset($p_username)) {
  $s_username = $p_username;
  $s_userpass = $p_userpass;
}
// Connecting, selecting database
$link = mysql_connect('localhost', 'aaaa', 'bbbb')
   or die('Could not connect: ' . mysql_error());

mysql_select_db('cccc') or die('Could not select database');

// Performing SQL query
$query = 'SELECT * FROM users';
$result = mysql_query($query) or die('Query failed: ' . mysql_error());


$name=mysql_fetch_assoc($result);
if(($name["username"]==trim($p_username)) && ($name["userpass"]==trim($p_userpass))){
    header("location:http://ddddddd");
}else{
   printf ("<meta http-equiv=\"refresh\" content=\"1; URL=./error.html\">" );
}
// Free resultset
mysql_free_result($result);

// Closing connection
mysql_close($link);

?>
alex123
 
Posts: 2
Joined: 22. February 2005 13:27

Postby jakimo72 » 26. February 2005 19:55

einge Anmerkungen:
1. Ich würde das Suchen in der Datenbank dem SQL-Server überlassen:
$query = "SELECT * FROM users WHERE username='".trim($p_username)."'";

2. Niemals Passworter in Klartext in eine Datenbank schreiben.
Verwende crypt():
$temp=crypt(trim(p_userpass),$name["userpass"]);
if($temp == $name["userpass"])
...
Danach am besten unsets auf $p_userpass, $temp und $name['userpass']
durchführen.

3. Die Mysql-Connection bitte vor dem header(localtion:)-Befehl schließen.

4. Es gibt beide Möglichkeiten ein Redirect durchzuführen: header(..) und <meta http-equiv="refresh"..>
Ich würde die erste Möglichkeit vorziehen, geht schneller und ist standardkonform. (Achtung vorher darf absolut keine Ausgabe erfolgt sein, nicht einmal ein Leerzeichen!)

5. Ich kenne keine sichere Möglichkeit einer Weiterleitung. Wie soll das
Script auf dem andern Server wissen, dass der Benutzer sich authentifizerit hat. Wenn beide Scripte auf einem Server liegen
geht es mit $_SESSION[].
Der $_SERVER[HTTP-REFERER] läßt sich zu leicht fälschen.
Eventuell könntest Du einen Hash aus der Serverkennung, der IP-Adresse des Benutzers und einem Zeitstempel erzeugen, und diese
Informationen verschlüsselt als GET-Varibale mit übertragen. Dazu müssen aber die Uhren der beiden Server synchronisiert sein.

Gruss
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby alex123 » 28. February 2005 12:30

Lieber jakimo72,

vielen Dank für die wichtige Anmerkungen.

Mfg
Alex
alex123
 
Posts: 2
Joined: 22. February 2005 13:27


Return to PHP

Who is online

Users browsing this forum: No registered users and 21 guests