Hallo an mein Lieblingsboard (ja ich weiß Schleimer und so aber es ist wirklich mein Lieblingsboard)
Beschäftige mich doch seit letzter Zeit was mehr mit dem Thema Sicherheit...
Also die größten Themen die mir dazu einfallen sind eigentlich XSS-Angriffe und SQL-Injections...
So nun habe ich mit vielen Funktionen und Codes (also Scripte) meine Seite getestet.
Klar was raus kam war natürlich dass meine Seite angreifbar war, weil ich nur die SQL-Abfragen per mysql_real_escape_string(xxx) gesichert hatte.
Dass man aber zb. nur durch ein Input welches als Value den eigenen Inhalt enthält Javascript ausführen kann war mir garnicht bewusst.
Also habe ich viel ausprobiert wie htmlentites usw...
Meine Endlösung für das Thema ist jetzt eigentlich eine komplett eigene Funktion die alle möglichen Zeichen in den HTML-Code &#..; umwandelt...
zum beispiel < in <
Insgesamt habe ich wirklich alle Zeichen umgewandelt...
Also ! " § $ % & / ( ) = ? ` ´ * # ' ; usw.......
Diese Funktion habe ich auf ALLE POST und GET Werte gesetzt. Und unter anderem auch auf $_SERVER['HTTP_USER_AGENT'] usw... Denn man kann ja eigene Werte für die Browser-Identifikation benutzen (in manchen Browsern)
Mein Resultat:
Alle getesteten Codes wurden entschärft... das gute daran ist dass der code optisch, zb. als input value sich nicht verändert (durch den html-code).
-- An dieser Stelle möchte ich auch andere PHP-Programmierer auffordern die eigene Seite zu testen --
Die folgenden Codes könnt ihr auf eurer Seite testen, entweder in ein input Feld (zb. Kontakt-Formular) oder als GET-Werte, zb. meineseite.de/artikel?id=2 (statt 2 dann halt einen code):
<script>alert('XSS')</script>
oder
';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//\";alert(String.fromCharCode(88,83,83))//--></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
oder
><script>alert('CSS Vulnerable')</script><b a=a
a></a><script>alert('CSS Vulnerable')</script>
\'><script>alert%28\'CSS Vulnerable\'%29</script><
(Diesen Code müsste man aber in eine Textarea schreiben (zb. Text bei Kontakt)
Mehr zum testen hier: http://ha.ckers.org/xss.html
SQL-Injection testen:
Beispiel-Code unsicherer Login:
Gibt man nun beispielweise folgende Daten ein würde man den Login umgehen:
Name: Egal
PW: ' OR 'test' = 'test
Klar wenn man beispielsweise das Passwort per sha1 oder sonst was verarbeitet geht es nicht, aber beispielsweise eine Abfrage per ID (die über GET übergeben wird) haben wir das gleiche Problem... denn statt eine ID könnte ein sql-code und/oder sogar javascript eingeben werden der die SQL-Abfrage ändert, im schlimmsten Fall zB. Tabelleneinträge löschen, oder sogar Cookies (JS) auslesen usw...
Thema Sicherheit (vor allem XSS und SQL-Injections):
- http://www.heise.de/security/artikel/84149
- http://www.heise.de/security/artikel/96564/Grundsicherung-fuer-PHP-Software
- http://de.wikipedia.org/wiki/SQL-Injektion
- http://www.bsi.de/literat/studien/websec/WebSec.pdf
- http://www.ibm.com/developerworks/opensource/library/os-php-secure-apps/index.html
-----------------------------------------
So zurück zu mir, abgesehen von meiner Funktion habe ich noch per htacces folgende Werte gesetzt:
register_globals 0
display_errors 0
open_basedi zb. ist schon von meinem Provider aus auf mein Verzeichnis gesetzt.
Zum Thema Sicherheit in Sessions weiß ich leider noch nicht viel.
Meine Sessions werden wie folgt gesetzt:
1. User loggt sich ein mit Name + PW(pw wird per sha1 "verschlüsselt")
2. Bei erfolgreichem Login bekommt er als Session-ID seine User-ID aus der Datenbank
mit dieser wird dann gearbeitet, zb. profil bearbeiten usw.
Nun (endlich^^) zu meiner Frage:
Dass man 100%ige Sicherheit nicht haben kann ist klar, aber meint ihr das reicht fürs grobe an Sicherheit? Oder habe ich noch wichtige Punkte übersehen?
Und vorallem wer hat noch einen Tipp in Bezug auf Sessions für mich, weil diese sind ja so noch nicht abgesichert.
Ich freue mich sehr über eure Antworten und danke euch schon jetzt dafür.
x3008x
Beschäftige mich doch seit letzter Zeit was mehr mit dem Thema Sicherheit...
Also die größten Themen die mir dazu einfallen sind eigentlich XSS-Angriffe und SQL-Injections...
So nun habe ich mit vielen Funktionen und Codes (also Scripte) meine Seite getestet.
Klar was raus kam war natürlich dass meine Seite angreifbar war, weil ich nur die SQL-Abfragen per mysql_real_escape_string(xxx) gesichert hatte.
Dass man aber zb. nur durch ein Input welches als Value den eigenen Inhalt enthält Javascript ausführen kann war mir garnicht bewusst.
Also habe ich viel ausprobiert wie htmlentites usw...
Meine Endlösung für das Thema ist jetzt eigentlich eine komplett eigene Funktion die alle möglichen Zeichen in den HTML-Code &#..; umwandelt...
zum beispiel < in <
Insgesamt habe ich wirklich alle Zeichen umgewandelt...
Also ! " § $ % & / ( ) = ? ` ´ * # ' ; usw.......
Diese Funktion habe ich auf ALLE POST und GET Werte gesetzt. Und unter anderem auch auf $_SERVER['HTTP_USER_AGENT'] usw... Denn man kann ja eigene Werte für die Browser-Identifikation benutzen (in manchen Browsern)
Mein Resultat:
Alle getesteten Codes wurden entschärft... das gute daran ist dass der code optisch, zb. als input value sich nicht verändert (durch den html-code).
-- An dieser Stelle möchte ich auch andere PHP-Programmierer auffordern die eigene Seite zu testen --
Die folgenden Codes könnt ihr auf eurer Seite testen, entweder in ein input Feld (zb. Kontakt-Formular) oder als GET-Werte, zb. meineseite.de/artikel?id=2 (statt 2 dann halt einen code):
<script>alert('XSS')</script>
oder
';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//\";alert(String.fromCharCode(88,83,83))//--></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
oder
><script>alert('CSS Vulnerable')</script><b a=a
a></a><script>alert('CSS Vulnerable')</script>
\'><script>alert%28\'CSS Vulnerable\'%29</script><
(Diesen Code müsste man aber in eine Textarea schreiben (zb. Text bei Kontakt)
Mehr zum testen hier: http://ha.ckers.org/xss.html
SQL-Injection testen:
Beispiel-Code unsicherer Login:
PHP:
$name = $_POST['name']; $pw = $_POST['pw'];
SELECT * FROM users WHERE name = '$name' AND pw = '$pw'
Gibt man nun beispielweise folgende Daten ein würde man den Login umgehen:
Name: Egal
PW: ' OR 'test' = 'test
Klar wenn man beispielsweise das Passwort per sha1 oder sonst was verarbeitet geht es nicht, aber beispielsweise eine Abfrage per ID (die über GET übergeben wird) haben wir das gleiche Problem... denn statt eine ID könnte ein sql-code und/oder sogar javascript eingeben werden der die SQL-Abfrage ändert, im schlimmsten Fall zB. Tabelleneinträge löschen, oder sogar Cookies (JS) auslesen usw...
Thema Sicherheit (vor allem XSS und SQL-Injections):
- http://www.heise.de/security/artikel/84149
- http://www.heise.de/security/artikel/96564/Grundsicherung-fuer-PHP-Software
- http://de.wikipedia.org/wiki/SQL-Injektion
- http://www.bsi.de/literat/studien/websec/WebSec.pdf
- http://www.ibm.com/developerworks/opensource/library/os-php-secure-apps/index.html
-----------------------------------------
So zurück zu mir, abgesehen von meiner Funktion habe ich noch per htacces folgende Werte gesetzt:
register_globals 0
display_errors 0
open_basedi zb. ist schon von meinem Provider aus auf mein Verzeichnis gesetzt.
Zum Thema Sicherheit in Sessions weiß ich leider noch nicht viel.
Meine Sessions werden wie folgt gesetzt:
1. User loggt sich ein mit Name + PW(pw wird per sha1 "verschlüsselt")
2. Bei erfolgreichem Login bekommt er als Session-ID seine User-ID aus der Datenbank
mit dieser wird dann gearbeitet, zb. profil bearbeiten usw.
Nun (endlich^^) zu meiner Frage:
Dass man 100%ige Sicherheit nicht haben kann ist klar, aber meint ihr das reicht fürs grobe an Sicherheit? Oder habe ich noch wichtige Punkte übersehen?
Und vorallem wer hat noch einen Tipp in Bezug auf Sessions für mich, weil diese sind ja so noch nicht abgesichert.
Ich freue mich sehr über eure Antworten und danke euch schon jetzt dafür.
x3008x
Zuletzt bearbeitet: