Sicherheitsmaßnahmen bei Login

B

Bgag

Abend!
Wie schon so oft gibt es das alte Thema login zu lösen. Jedoch möchte ich hier nicht nach dem generellen Aufbau eines solchen Scripts oder einer solchen Klasse fragen, sondern ich bitte euch um Tipps, was wann tun kann, um dieses Login so sicher wie möglich zu gestalten. Wie sollen Userdaten abgefragt oder übertragen werden? Wie schütz man sich am besten vor
  • Cross-Site Scripting
  • Cross-Site Cooking
  • Cross-Site Tracing
  • Cross-Site Request Forgery
  • SQL-Injektion
  • Header-Injection
oder ähnlichen Angriffswegen? Ich wäre euch für eure Tips sehr verbunden.
MfG, Andy
 
Am sichersten gegen SQL-Injektion ist es die Formularwerte erst garnicht in den Sql befehl mit einzubinden.

Ist aber etwas Serverlastig.


Mfg Splasch
 
Quatsch, einfach mysql_escape() oder mysql_real_escape() verwenden und gut ist. mysql_escape() ist besser, da kein request zur DB abgeschickt wirkt, um zu erfahren, welches Escape-Zeichen denn nun bevorzugt verwendet werden soll.

PHP:
$sql = "INSERT INTO table ('column1', 'columns2') VALUES ('".mysql_escape($value1)."', '".mysql_escape($value2)."');";
Schon klappt SQL Injection nicht mehr.


Cross-Site Scripting kann viele Ursachen haben: direkte Einbindung von PHP Scripts über die URL ist ziemlich gefährlich und sollte auf jeden Fall vermieden werden. Desweiteren sind Formulare ziemlich anfällig und sollten richtig validiert werden.

Ein weiterer, wichtiger Punkt, ist die Initialisierung von Variablen. Wer dies richtig Handhabt, vermindert das Risiko von XSS. OOP hilft da zum Teil weiter, weil es von der Struktur her offensichtlicher ist (für mich), wo ich welche Variablen initialisieren muss. Wer ganz auf Nummer sicher gehen will prüft seine Variablen mittels einer Klasse auf den korrekten Datentyp.

Unit-Tests könnten auch hilfreich sein mit z.B. PHPUnit. Da kenne ich mich aber nicht aus.

Mehr fällt mir jetzt so spontan nicht ein :)



Gruß Radhad
 
Quatsch, einfach mysql_escape() oder mysql_real_escape() verwenden und gut ist. mysql_escape() ist besser, da kein request zur DB abgeschickt wirkt, um zu erfahren, welches Escape-Zeichen denn nun bevorzugt verwendet werden soll.

mysql_escape() oder mysql_real_escape() ist zwar eine nette sache aber nicht 100% Sicher es gibt immer wege und mitteln wie man das umgehen kann.

Mfg Splasch
 
Hi,
eine 100%ige Sicherheitsvariante gibt es nicht und wird es auch nie geben.
Radhads aussage ist schon bekräftigt ;).

Sonnige Grüße,
cille
 
Abend!
Danke schonmal für eure zahlreichen Antworten. Ich stell mir jetzt jedoch die Frage, wie man userdaten, von einem aktiven user am besten übergibt. Session, Cookie(nich so toll, da abstellbar), verschlüsselt per URL oder via session_id?
Wäre euch für eure Hilfe, Tipps und erfahrungen dankbar.
MfG, Andy
 
Denke die praktikabelste Methode wäre das mit Sessions zu realisieren!
Wenn jemand Cookies nicht annimmt, sind für diesen User einige Dinge nicht umsetzbar, was dann aber außerhalb deine Macht liegt und der User sich damit wohl eher ins eigene Fleisch schneidet (z.B. "Eingeloggt-bleiben"-Funktion, oder allgemein alles, was mit User-Wiedererkennung zu tun hat)
Dass dann auch das Session-Cookie nicht angenommen wird ist zweitrangig, da die Session-ID ja auch per hidden-Feld oder URL mitübertragen werden kann, also bleibt die Session-Funktionalität erhalten. (Automatisch, session.use_cookies, session.use_only_cookies, session.use_trans_sid)
MfG
 
In allen Fällen heißt es: Benutzereingaben nie ungeprüft verarbeiten und ausgeben. Denn bei allen Sicherheitslücken werden Metazeichen des jeweiligen Kontextes verwendet, um diesen zu verlassen. Deshalb müssen die Benutzereingaben nach Metazeichen untersucht und diese entweder entfernt oder maskiert werden, um sie dadurch unschädlich zu machen.
Eine universelle Funktion gibt es dazu allerdings nicht, da jede Sprache und jeder Kontext seine eigenen Metazeichen hat.
 
Zurück