session_start() Problem

Nein das ist nicht besonders schwer.
Die Funktion mysql_real_escape_string ist ein ziemlich gutes und nützliches Werkzeug dafür.
 
Vor dem session_start(); dürfen keinerlei ausgaben kommen.
Also auch keine Leerzeilen aus scripten oder ähnlichem.

Um ganz sicher zu gehen, könntest du als ERSTE Zeile NACH dem <? einfach
PHP:
ob_start();
schreiben.

Dieses verhindert jegliche Ausgabe an den Browser bis entweder flush(); aufgerufen wird, oder das Script fertig ist.

Auf jeden Fall bekommst du keine header Probleme mehr.

Und zu dem mysql_real_escape_string...

schicke deine Formulardaten durch diese Funktion um Sicherheitslücken zu schliessen und SQL Injections zu vermeiden.

PHP:
$username = mysql_real_escape_string($_POST["username"]); 
$passwort = md5(mysql_real_escape_string($_POST["password"]));

In Deiner else Anweisung ist übrigens nur das Passwort falsch, nicht der Benutzername, weil der wurde ja gefunden

Du verwendest $row = mysql_fetch_object($result); obwohl Du nicht weisst ob du überhaupt ein ergebnis hast.
Also erstmal mysql_num_rows($result) abfragen.
Ist das ergebnis == 0 dann ist der Username falsch.
Ist es == 1 dann stimmt der Username und du kannst mysql_fetch_object($result); machen
Ist es > 1, dann hast du mehrere User mit dem gleichen Benutzernamen. (Was allerdings durch das LIMIT 1 verhindert wird, er findet immer 0 oder 1 DS)

Du kannst natürlich auch in der Query direkt nach Username UND Passwort suchen
Du verwendest LIKE ohne Wildcard, dann nimm bitte = und nicht LIKE
PHP:
$username = mysql_real_escape_string($_POST["username"]); 
$passwort = mysql_real_escape_string($_POST["password"]); 
$sql="SELECT name, passwort FROM $DB_TB_NAME_ADMIN WHERE name = '$username' AND passwort = md5('$passwort')";
PHP:
<?php 

  $username = $_POST["username"]; 
  $passwort = $_POST["password"]; 


//Auslesen der Datenbank

  mysql_connect("$BD_SERVER","$DB_NUTZER","$DB_PASSWORT");
  mysql_select_db("$DB_NAME");
$sql="SELECT name, passwort FROM $DB_TB_NAME_ADMIN WHERE name = '$username' AND passwort = md5('$passwort')";
if (mysql_num_rows($result)==0)
{
echo "<br>\n";
      echo "Benutzername und/oder Passwort waren <b><font color=\"#ff0000\">falsch</font></b>.\n";
      echo "<br>\n<br>\n<br>\n";
      echo "<div align=\"center\"><input type=\"button\" value=\"&nbsp;&nbsp;zur&uuml;ck&nbsp;&nbsp;\"class=\"button\" onclick=\"document.location.href='index.php'\"></div>\n<br>\n<br>\n<br>\n";
}
else
{
  $result=mysql_query($sql);
  $row = mysql_fetch_object($result); 
      $_SESSION["username"] = $username; 

      echo "<br>\n";
      echo "Hallo <b>\"" . $username . "\"</b> du hast dich <b><font color=\"#00ff00\">erfolgreich</font></b> angemeldet\n";
      echo "<br>\n<br>\n<br>\n";
      echo "<div align=\"center\"><input type=\"button\" value=\"&nbsp;&nbsp;weiter&nbsp;&nbsp;\" class=\"button\" onclick=\"document.location.href='index.php?section=31'\"></div>\n<br>\n<br>\n<br>\n";
    } 

?>
 
Zuletzt bearbeitet:
Die md5()-Funktion erzeugt bereits nur „ungefährlich“ Werte, weswegen hier mysql_real_escape_string()-Funktion nicht nur sinnlos ist, sondern sogar den Wert verfälscht:
PHP:
$val = '"foobar"';
var_dump(md5($val) == md5(mysql_real_escape_string($val));
 
In meinem Beispiel wird die md5 funktion von MySQL benutzt und nicht die von PHP

Aber ich habe es ins PHP beispiel reingeschrieben. Sorry about that...
 
Und zu dem mysql_real_escape_string...

schicke deine Formulardaten durch diese Funktion um Sicherheitslücken zu schliessen und SQL Injections zu vermeiden.

PHP:
$username = mysql_real_escape_string($_POST["username"]); 
$passwort = md5(mysql_real_escape_string($_POST["password"]));
So lautet zumindest der Stand vom 17.08.08 um 00:40 Uhr.
 
Zurück