2011-01-02 4 views
0

Ich sehe, es gibt eine Menge reden hier darüber, wie man Daten bereinigen wird. Könnte es so einfach sein wie das Hinzufügen dieser Rewrite-Regel zu .htaccess?Sanitize GET-Abfrage mit Apache

Zu meinem Verständnis erlaubt dies nur Buchstaben, Zahlen, _ und - in $ 1, bin ich richtig?

Wenn Sie diese Verwendung von vorbereiteten Anweisungen für SQL-Abfragen hinzufügen, sollte es ziemlich Beweis sein, ist das richtig?

Irgendwie fühlt sich an wie zu einfach, um wahr zu sein, fehle ich etwas, irgendwelche Möglichkeiten, es zu festigen?

Antwort

1

Wenn Sie diese Verwendung von vorbereiteten Anweisungen für SQL-Abfragen hinzufügen, sollte es ziemlich Beweis sein, ist das richtig?

Nicht wirklich, weil Ihre Regel für die meisten Anwendungsfälle zu streng ist. Denken Sie zum Beispiel an Umlaute in String-Eingaben. Sie müssen einige Nicht-ASCII-Zeichen für einige Eingaben zulassen. Solche Daten sind percent encoded in URLs, also müssten Sie bestimmte Charaktere herausfiltern, und selbst das wäre für die Sicherheit nutzlos. Es gibt viel, viel mehr Angriffsvektoren als nur Datenbankinjektionen.

Für all diese Gefahren gibt es keine "one size fits all" Sanierungsmethode. Für jedes Szenario (Verwendung in Dateinamen; in HTML-Ausgabe; in Javascript-Ausgabe; in E-Mails .....) gibt es einen richtigen Weg. Das Herausfiltern von "ungültigen" Zeichen auf Web-Server-Ebene ist nicht wirklich praktisch - für eine perfekte Sicherheit müssten Sie all diese spezifischen Sanierungsfunktionen in der Apache-Syntax neu erstellen, was nahezu unmöglich ist.

Siehe auch: PHP: the ultimate clean/secure function

+0

Was würden Sie als weiteren Sicherheitsschritt vorschlagen, wenn wir über die Verwendung für SQL-Abfragen sprechen - kann url_decode etwas nützen? Auch über XSS durch HTML-Ausgabe, verhindert das Strippen> nicht das Vorhandensein von HTML? Tut mir leid, wenn Fragen ein wenig uninformiert klingen, genau darum frage ich. – CodeVirtuoso

+0

@Freelancer Die vorbereiteten Anweisungen von PDO oder mysqli gelten als ausreichender Schutz gegen die Injektion. Es besteht keine Notwendigkeit, etwas anderes zu tun. Re XSS, lassen Sie mich einen Link –

+1

@ Freelancer Re XSS, Ausführen 'htmlspecialchars()' auf beliebigen Benutzerdaten vor der Ausgabe in HTML ist obligatorisch. Hier ist eine Antwort, die behauptet, dass 'strip_tags()' auch notwendig ist, um vor einem eher exotischen Angriff zu schützen: http://stackoverflow.com/questions/3623236/htmlspecialchars-vs-htmlentities-when-concerned-with-xss aber Ich bin mir nicht sicher, was ich davon halten soll - ich persönlich denke 'htmlspecialchars()' wird es tun. –

1

Vielleicht möchten Sie mit so etwas wie mod_security untersuchen, ob Sie die Dinge auf dem Web-Server-Ebene wollen, sind. Es wird helfen, einige Angriffe zu mildern - aber das ultimative Niveau der Verteidigung muss innerhalb von PHP selbst getan werden. Es wird immer einen Angriff geben, der vom Webserver als "gut" eingestuft wird, aber in Ihrer Anwendung Chaos verursacht. Ganz gleich, wie gut Sie Abfrageparameter sperren, um Sicherheitslücken in der Injektion zu vermeiden, es wird Ihnen etwas fehlen.

Warum also verschwenden Stunden/Tage Ihrer Zeit mit der perfekten RewriteRule, wenn Sie nur eine einfache mysql_real_escape_string() in PHP tun können und alles genau dort fangen?