Henryk Plötz: Authentifizierung/ Passwortschutz über Sessions, Sicherheit?

Beitrag lesen

Moin,

Dein Programm kann Fehler enthalten die den Sicherheitsmechanismus aushebeln können.

Ack, deswegen würde ich das etwas robuster gestalten:

  • Die Datenbank nur nach dem Benutzernamen fragen
  • Falls nicht genau ein Datensatz gefunden wird abbrechen
  • Aus dem Datensatz das Passwort auslesen und in PHP mit dem eingebenen Passwort vergleichen

Der Grund dafür ist dass das dann auch bei einigen gern gemachten Fehlern sicher bleibt. Es ist zum Beispiel in der Vergangenheit oft vorgekommen, dass ein Angreifer über die Datenbankabfrage SQL-Code einschleusen konnte[1] der dann einfach aus der Abfrage ein SELECT ... WHERE username = ... OR 1 = 1 gemacht hat. Somit hat die Datenbank in jedem Fall etwas zurückgeben und der Schutz war nutzlos.
Oder wenn du nicht die für SQL besonderen Zeichen maskierst, könnte jemand ... WHERE password = '%' ... [2] zusammensetzen, was dann für das PHP-Skript auch in Ordnung aussehen würde.

Alernative ist Zugriff mittels http-Authentification (oft .htaccess), der Vorteil ist das der Schutz ziemlich gut getestet ist.

Der Nachteil ist dass das Passwort dann in jedem Request im Klartext mitgesendet wird[3] und ein Sniffer so unter Umständen mehr Gelegenheiten bekommt es abzuhören. Von der Unmöglichkeit eines sicher funktionierenden serverseitigen Logouts ganz zu schweigen.

[1] Selbstverständlich wirst du dich bemühen das unmöglich zu machen indem du alle Werte von aussen in der Abfrage in Anführungszeichen einsschliesst und darauf achtest dass diese keine unmaskierten Anführungszeichen enthalten.

[2] Bzw. das gleiche mit dem Usernamen und dann einfach verschiedene Passwörter ausprobieren, irgendeiner der User wird schon ein schwaches Passwort haben.

[3] Zumindest solange man den IE nicht ignorieren und Digest Access Authentication nehmen kann.

--
Henryk Plötz
Grüße aus Berlin
~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~