Eure Meinung über Sicherheit dieses php, mysql LoginSystem

bennot

Mitglied
Hallo, mich würde eure Meinung über die Sicherheit dieses Loginsystem interessieren

http://www.php-einfach.de/tuts_mysql_login.php


Wie beurteilt Ihr in Sachen Sicherheit:
1) Datenbank Connect
2) Where Klauseln für Logindatenabfrage
3) was euch sonst noch auffällt


Meine geplanten Optimierungen:
- Passwort mit MD5 + Salt
- eure Anregungen


Sicherlich für alle Interessant :) Freu mich über eure Antworten
 
Hi

grade nur kurz überflogen (werde es noch genauer anschauen).
Aber paar Sachen muss ich jetzt schon loswerden:

MD5 ist bäää.
Es ist seit Jahren bekannt, dass MD5-Hashes nicht mehr sicher sind.
Nimm SHA.

Jetzt ist es zwar zu spät, aber wenn du noch nichts geschrieben hättest
hätte ich gesagt: Kein Login-Tutorial.
a) Gibts wie Sand am Meer. Warum nicht ein selteneres Thema...bringt auch mehr Klicks...
b) Leute, die solche Logintutorials verwenden haben keine Ahnung vom PHP
(wenn man die PHP-Grundlagen allgemein kann ist ein Login ohne Tutorials kein Problem mehr)
Wenn jetzt so einer dein Tutorial nachbaut kann es sein, dass er es schafft
->Dann denkt er, juchuu, ich kann PHP. Schön (auch wenn man anderer Meinung ist).
Dann setzt er sich dazu und versucht vielleicht,
noch ein paar kleine Funktionalitäten mit dem Gelernten umzusetzen.
Kann sein, dass er auch das schafft.
Nur: Da ist die ganze Sicherheit dann wieder über den Haufen geworfen,
weil er außer den Punkten, die in dienem Tutorial wichtig waren, ncihts weiß.

So...genauer lesen...

edit:
Punkt Vorbereitung:
Wie man die Datenbanktabelle erstellt wäre mir als Anfänger komplett unklar.
id, int, 8, unsigned, not null, , auto_increment, primary, ,
hmm ja...

mysql_... ist auch bää.

Die Doppelbenutzernameprüfung eher mit Unique in der DB.
So ists nämlich a) unschön b) nciht garantiert, dass nicht doch zwei mit selbem namen reinkommen.

SQL-Injection verhindern...
überall.

username LIKE ...?
Warum Like.
= bitte

Wichtig: Bitte keine Abfrage machen, wo als WHERE-Kriterium das Passwort angegeben wird. Denn so eine Passwortabfrage kann man sehr leicht knacken.
Warum denn?

usw...

Paar Rechtschreib/Grammatikfehler.
 
Folgendes ist mir aufgefallen:

1. Der Contentbereich ist mir etwas schmal, gerade, wenn du PHP ausgibst.

2. md5 hätte ich nicht so die Probleme mit. SHA1 wurde auch schon angegriffen. Wirklich geknackt wurde keiner. Ich habe auf ein sich weiterentwickelndes System gesetzt, das mehrere Hashes verwenden kann. Aber das braucht man sicher nicht für einen Einsteiger.

3. Zur Datenbank könnte man tatsächlich mehr schreiben.

4. LIKE - mache ich auch so. Das erkennt den Usernamen unabhängig von Groß- und Kleinschreibung.

5. Deine zahlreichen Dateien sind mir zuviel. Suchbegriff "Affenformular" - das ist besser.

6. Unbedingt nach SQL-Injection googeln und mysql_real_escape_string() verwenden, besser PDO, weil...

7. ...in der neusten PHP-Version wird mysql_ als veraltet eingestuft. Ich würde dann an deiner Stelle gleich den Schritt zu PDO machen statt mysqli_

8. Ich würde auch nicht den Usernamen, sondern die ID des angemeldeten Users in der Session speichern. Die brauche ich öfter.

9. Das hier verstehe ich nicht:
Wichtig: Bitte keine Abfrage machen, wo als WHERE-Kriterium das Passwort angegeben wird. Denn so eine Passwortabfrage kann man sehr leicht knacken.

10. Naja, und noch ein Wort zum Connect. Ich lagere sowas in eine andere Datei aus und würde dafür vielleicht auch auf ein anderes Tutorial verweisen.

HTH :)
 
Und noch was zur Seite selber.
ich habe einen normalen breiten Bildschirm. Davon ist deine Seite im mittleren FÜNFTEL der Bildschirmbreite untergebracht. Dafür muss ich dann die Code-Fenster Links-Rechts Scrollen um den Code zu sehen. Also um eine Zeile zu lesen nach rechts Scrollen. Nächste Zeile wieder zuerst alles nach links um langsam wieder nach rechts zu scrollen. Meine Augen können ein breiteren Text erfassen als 8cm.
Das mag ja nett sein auf einem Smartphone - doch die meisten PHP-Entwickler entwickeln nicht auf dem Smartphone.

Sorry, so dargestellt würde ich als Anfänger das Tutorial gleich wieder weglegen. Es ist so einfach unüberschtlich

Ich jedenfalls kann nix zum Inhalt des Tutorials sagen, da ich den Code nicht gelesen habe.
 
Noch was zu dem Teil, in dem geprüft wird, ob ein Benutzername schon vergeben wurde: Wesentlich eleganter wäre es IMHO, den Benutzernamen auf UNIQUE zu stellen und einfach einen INSERT abzufeuern. Der liefert dann entweder OK oder einen Fehler.
 
Zurück