• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

SQL-Injection : POST & GET Variablen sicher machen

StephanBo

Mitglied
Ich hatte die letzten zwei Tage mal Zeit mich genauer in Sicherheitsaspekte einzulesen, aber ich bin mir nicht sicher, ob ich es an manchen Stellen richtig verstanden habe. Mich würde nun interessieren was an den beiden unten angeführten Codes weggelassen werden kann und was eventuell fehlt, um SQL-injectons und auch Javascript-Hacks zu unterbinden.


POST-Beispiel: Es soll ein Eintrag in ein Gästebuch vorgenommen werden

$comment = mysql_real_escape_string(trim(htmlspecialchars($_POST['comment'])), ENT_QUOTES);

htmlspecialchars kann hier wohl weggelassen werden, richtig? Ist ENT_QUTES dennoch relevant wenn ich vorher schon das real_escape_string Attribut einsetze?



GET-Beispiel: Aus der URI meineseite.de?id=1&title=headline soll die Überschrift ausgelesen werden, die im weiteren Prozedere der Seite für weitere SQL- SELECT und evtl. auch POST Befehle als Variable genutzt wird.

$title = htmlspecialchars($_GET['title'], ENT_QUOTES);

Hier bin ich mir gar nicht sicher, ob man den $_GET Befehl überhaupt um Sicherheitsattribute ergänzen muss oder diese erst später bei eventuellen POST Befehlen verwendet werden. Mein Gedanke ist hier, dass wenn ich ja bereits die Variablenauslesung aus der GET-Varbiable sicher mache, ich später nicht noch einmal in den einzelnen SELECT und POST Queries mit Sicherheitsattributen arbeiten muss. Weis aber wie gesagt nicht, ob der Denkansatz sinn macht und optimal ist.



Vielen Dank schon mal für die Hilfe.
 
Werbung:
also im Vorraus:
POST und GET sicher zu machen? - geht nicht

was das ENT_QUOTES angeht: PHP: htmlspecialchars - Manual


Aber natürlich gibt es eine Reihe an Dingen, welche du beachten solltest, damit dein Script sicher ist.
- immer htmlspecialchars() o.Ä. benutzen
- keine 'Schwachstellen' im Script
- keine Unnötigen GET/POST Parameter (Session z.B für eine userid o.Ä.)

es gibt im übrigen auch die Funktion strip_tags()
PHP: strip_tags - Manual

Sie entfernt alle HTML Klammern, und verhindert somit auch das ausführen von JavaScript
 
Werbung:
strip_tags() gehört zu den Funktionen, die selten Sinn machen. Um HTML zu escapen, benutzt man htmlspecialchars().

Eine Datenbank spricht kein HTML. HTML ist also für die Datenbank nicht gefährlich, also solltest du HTML beim Schreiben in die Datenbank nicht escapen. Denn nehmen wir an, du willst das, was in der Datenbank steht, in einem PDF anzeigen. Dann hast du plötzlich überall seltsame &quote; usw. Das willst du nicht. htmlspecialchars() verwendet man, wenn man die Ausgabe in einem HTML-Dokument sicher einbetten will.

Und wie Sentence bereits gesagt hat, helfen prepared Statements gegen SQL-Injections.

Du benutzt die MySQL-Extension, die ab PHP5.5 veraltet ist und in PHP5.6 oder PHP6 gar nicht mehr existieren wird. Daher solltest du mysqli oder PDO verwenden; diese können auch prepared Statements.
 
Zurück
Oben