Gibt es irgendwo eine Auffangfunktion, die gut funktioniert, um Benutzereingaben für SQL-Injection- und XSS-Angriffe zu säubern und gleichzeitig bestimmte Arten von HTML-Tags zuzulassen?
Antworten
Zu viele Anzeigen?
Anmol Mourya
Punkte
460
Till
Punkte
21912
Es gibt die Filtererweiterung ( Anleitungs-Link , Handbuch ), was mit allen GPC-Variablen recht gut funktioniert. Es ist nicht eine magische-do-it-all Sache aber, müssen Sie noch zu verwenden.
Erik Thiart
Punkte
298
Vertrauen Sie niemals auf Benutzerdaten.
function clean_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
El trim()
Funktion entfernt Leerzeichen und andere vordefinierte Zeichen von beiden Seiten einer Zeichenkette.
El stripslashes()
Funktion entfernt Backslashes
El htmlspecialchars()
Funktion wandelt einige vordefinierte Zeichen in HTML-Entities um.
Die vordefinierten Zeichen sind:
& (ampersand) becomes &
" (double quote) becomes "
' (single quote) becomes '
< (less than) becomes <
> (greater than) becomes >
- See previous answers
- Weitere Antworten anzeigen
48 Stimmen
Um Sql-Injection zu vermeiden, verwendet man heutzutage PDO oder MySQLi.
97 Stimmen
Die Verwendung von PDO oder MySQLi ist nicht genug. Wenn Sie Ihre SQL-Anweisungen mit nicht vertrauenswürdigen Daten erstellen, wie
select * from users where name='$name'
dann spielt es keine Rolle, ob Sie PDO oder MySQLi oder MySQL verwenden. Sie sind immer noch in Gefahr. Sie müssen parametrisierte Abfragen verwenden oder, wenn es sein muss, Escape-Mechanismen für Ihre Daten einsetzen, aber das ist weit weniger empfehlenswert.30 Stimmen
@AndyLester Wollen Sie damit andeuten, dass jemand PDO ohne vorbereitete Anweisungen verwendet? :)
76 Stimmen
Ich will damit sagen, dass "Benutzen Sie PDO oder MySQLi" nicht genug Information ist, um Anfängern zu erklären, wie man sie sicher benutzt. Sie und ich wissen, dass vorbereitete Anweisungen wichtig sind, aber ich gehe nicht davon aus, dass jeder, der diese Frage liest, dies weiß. Deshalb habe ich die ausdrücklichen Anweisungen hinzugefügt.
0 Stimmen
Ist also die Verwendung von PDO::prepare() oder PDO::quote() in diesem Fall die richtige Antwort?
37 Stimmen
Die Bemerkung von Andy ist völlig richtig. Ich habe meine mysql-Website vor kurzem auf PDO umgestellt, weil ich dachte, dass ich nun irgendwie vor Injektionsangriffen sicher sei. Erst während des Prozesses stellte ich fest, dass einige meiner SQL-Anweisungen immer noch mit Benutzereingaben erstellt wurden. Das habe ich dann mit Prepared Statements behoben. Einem völligen Neuling ist nicht ganz klar, dass es einen Unterschied gibt, da viele Experten zwar die Verwendung von PDO erwähnen, aber nicht auf die Notwendigkeit von vorbereiteten Anweisungen hinweisen. Die Annahme ist, dass dies offensichtlich ist. Aber nicht für einen Neuling.
0 Stimmen
Ich schätze, diese Antwort funktioniert: stackoverflow.com/questions/60174/
12 Stimmen
@Christian: GhostRider und AndyLester haben Recht. Lasst uns dies eine Lektion in Kommunikation sein. Ich war einmal ein Anfänger und es war scheiße, weil Experten einfach nicht wissen, wie man kommuniziert.
1 Stimmen
Die Bemerkung von Andy ist völlig richtig. Ich habe vor kurzem meine mysql-Website auf PDO umgestellt und dachte, dass ich nun irgendwie vor Injektionsangriffen sicher sei. Erst während des Prozesses stellte ich fest, dass einige meiner SQL-Anweisungen immer noch mit Benutzereingaben erstellt wurden. Das habe ich dann mit vorbereiteten Anweisungen behoben. Für einen absoluten Neuling ist es nicht ganz klar, dass es einen Unterschied gibt, da viele Experten die Verwendung von PDO erwähnen, aber nicht näher darauf eingehen.