dedlfix: Ist mein Login System sicher genug

Beitrag lesen

echo $begrüßung;

$nick=$_POST['user'];
$pw=$_POST['pw'];
Man kann mit den Werten in $_POST auch direkt weiterarbeiten. Das Anlegen neuer Variablen ist nicht erforderlich.
Ist mir irgendwie übersichtlicher. Oder ändert es viel an der Performance?

Das mit der Übersicht kann man so oder so sehen. Wenn du die Werte umkopierst, sieht man nicht mehr auf Anhieb, dass der Inhalt der Variablen, wenn sie später weiterverwendet wird, von außen kommt. Man muss sich merken, dass diese Variablen ungefilterte und ungeprüfte Werte enthält.

Beim Anlegen einer Variable mit dem Inhalt einer anderen Variable legt PHP intern nur einen Zeiger auf den ursprünglichen Inhalt an. Erst wenn sich der Inhalt einer der beiden Variablen ändert, wird eine Kopie des Inhalts erzeugt. Von daher wird zunächst kein doppelter Speicherplatz für den Inhalt und auch keine Zeit für dessen Kopieren verwendet, aber das Anlegen der Variable ist natürlich nicht völlig umsonst zu haben.

Hmm.. okay.. aber das mit dem mysql_real_escape_string() verstehe ich nicht ganz obwohl ich mir dazu das Manual durchgelesen habe.

Ich hab da schon mal was vorbereitet: </archiv/2006/8/t134653/#m873635>

Das ganez Funktioniert. Aber ist es sicher genug?
Sicher gegen:

[...]

  • Abfangen von Userdaten

Durch wen und wobei?

  • Fälschung der Session (verdammt wichtig)
      das sich kein Fremder einloggen kann der nicht angemeldet ist.

Im Allgmeinen sind Cookies besser gegen Weitergabe geschützt als eine URL mit angehängter Session-ID, aber manche User schalten die Keks aus, teilweise auch aus Unkenntnis über ihr Wesen.

  • Einschläusung von Code in die Datenbank

Zum Einschleusen muss man zwar schlau sein, trotzdem stammt das Wort nicht davon ab. :-)
Welcher Art die Daten sind, die in der DB zu liegen kommen ist nicht ganz so wichtig. Wichtiger ist, dass sie beim Eintragen, Auslesen und Weiterverarbeiten als Daten behandelt werden und nicht als ausführbaren Code. Deswegen ist es wichtig, die Daten gemäß den Regeln des Ausgabemediums zu kodieren (mysql_real_escape_string() für MySQL-Stements, htmlspecialchars() für HTML, usw. usf.)

  • Einschläusung von Fehlern

Fehler schleust man nicht ein, sie sind entweder da (auch unerkannterweise) und damit ausnutzbar oder nicht.

  • Bruteforce Attacken

Man kann verhindern, dass mehrfache Versuche uneingeschränkt gelingen, das sollte man aber wohlüberlegt angehen, da man sonst auch unschuldige Anwender aussperren kann.

echo "$verabschiedung $name";