Funktion zur Bereinigung von Eingaben an Mysql-Datenbank
Ich versuchte eine Allgemeine Funktion zusammen, desinfizieren-Eingang zu einer Mysql-Datenbank. So weit ist das, was ich habe:
function sanitize($input){
if(get_magic_quotes_qpc($input)){
$input = trim($input); //get rid of white space left and right
$input = htmlentities($input); //convert symbols to html entities
return $input;
} else {
$input = htmlentities($input); //convert symbols to html entities
$input = addslashes($input); //server doesn't add slashes, so we will add them to escape ',",\,NULL
$input = mysql_real_escape_string($input); //escapes \x00, \n, \r, \, ', " and \x1a
return $input;
}
}
Wenn ich verstehen die definition von get_magic_quotes_qpc()
. Dies wird durch den php-server automatisch die escape-Zeichen anstelle des Müssens zu verwenden addslashes()
.
Habe ich addslashes()
und mysql_real_escape_string()
richtig zusammen und gibt es etwas, was ich hinzufügen könnte erhöhen die Bereinigung.
Dank
Die Kombination, wie viele escaping-Funktionen wie möglich ist kein guter Ansatz. Sie werden nur am Ende mit triple entgangen Daten, und kann es nicht verwenden, für nichts, aber in der html-Ausgabe.
Siehe auch Methode für die Desinfektion der user-input -und- Was sind die besten PHP-Eingang Hygienisierung von Funktionen?
möglich, Duplikat der Ist es empfehlenswert, einen santizing Funktion verbindet zwei oder mehrere eingebaute Desinfektions-Funktionen in php?
Siehe auch Methode für die Desinfektion der user-input -und- Was sind die besten PHP-Eingang Hygienisierung von Funktionen?
möglich, Duplikat der Ist es empfehlenswert, einen santizing Funktion verbindet zwei oder mehrere eingebaute Desinfektions-Funktionen in php?
InformationsquelleAutor crm | 2012-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
htmlentities() ist unnötig, damit die Daten sicher für SQL. Es wird verwendet, wenn die echo-Daten, die Werte für die HTML-Ausgabe, zum vermeiden von XSS-Schwachstellen. Das ist auch eine wichtige Frage der Sicherheit, die Sie brauchen, um bewusst sein, aber es ist nicht im Zusammenhang mit SQL.
addslashes() ist redundant mit mysql_real_escape_string. Sie werden am Ende mit Literale umgekehrte Schrägstriche in den Zeichenfolgen in der Datenbank.
Nicht verwenden, magic quotes. Diese Funktion veraltet seit vielen Jahren. Stellen Sie nicht den PHP-code in eine Umgebung, wo magic quotes aktiviert ist. Wenn es aktiviert ist, deaktivieren Sie es. Wenn es eine gehostete Umgebung und Sie lässt sich nicht ausschalten, magic quotes, bekommen einen neuen hosting-provider.
Nicht verwenden
ext/mysql
. Es unterstützt keine Abfrage Parameter, Transaktionen oder OO-Nutzung.Verwenden PDO, und stellen Sie Ihre Abfragen sicherer durch die Verwendung vorbereitete Abfragen.
Weitere details über das schreiben sicher von SQL, Lesen Sie meine Präsentation SQL-Injection-Mythen und Irrtümer.
InformationsquelleAutor Bill Karwin
Magic quotes sind veraltet. Schalten Sie Sie aus, wenn du kannst :).
Den zweiten Teil
addslashes
undmysql_real_escape_String
hat so ziemlich das gleiche (ähnliche) Sache. Versuchen Sie einfachErgebnis sollte
\\
also, wenn Siesollten Sie sich
\\
(oder'\\\\'
als string). Verwenden Sie nurmysql_real_escape_string
(besser) ODERaddslashes
, nie beide.Empfehle ich die Nutzung PDO anstelle von raw-Funktionen und manuelle entkommen.
InformationsquelleAutor Vyktor
Warum wollen Sie anwenden, htmlentities vor dem speichern von Daten in der Datenbank? Was, wenn Sie wollen, verwenden Sie die Daten für etwas anderes als einfach nur zu schreiben es sich um einen browser? Zum Beispiel für die Suche, das partitionieren von Daten, die Verwendung der Daten in anderen Programmiersprachen, etc...
Das einzige, was Sie wirklich wollen zu beziehen, ist mysql_real_escape_string (oder verwenden Sie PDO), sonst nichts.
Ich in der Regel lieber rückgängig machen die Auswirkungen der magic quotes völlig, immer. Magic quotes ist einfach nur umständlich, mit zu arbeiten und sollten nie erfunden worden sein. Hier ist ein Ausschnitt aus dem PHP-Handbuch zu reverse magic quotes:
InformationsquelleAutor Emil Vikström
der Schlimmste Teil, dass hinzufügen von slashes funktioniert nicht bereinigt, nichts, egal, welche Funktion verwendet wurde.
und es sollte nicht verwendet werden in der Mittel, was auch immer "- Bereinigung" an alle.
Schrägstriche nicht "bereinigen" der Daten. Schrägstriche entkommen Sie string-Begrenzungszeichen nur. So, das nur die Entkeimung mit dem Sie sprechen können, ist die Flucht und unter Angabe.
Sonst, wenn Sie nicht setzen Sie Anführungszeichen um "sanitized" string", haben Sie überhaupt keinen Schutz.
InformationsquelleAutor Your Common Sense
Verwenden:
Dies verhindert, dass fehlerhafte Daten wie DROP TABLE 😉
InformationsquelleAutor Frederick Marcoux