Frage

ich normalerweise diese Funktion verwenden, um meine Form Eingänge zu sanieren, bevor sie in der Datenbank zu speichern:

//Function to sanitize values received from the form. Prevents SQL injection
function clean($str) {
    $str = @trim($str);
    if(get_magic_quotes_gpc()) {
        $str = stripslashes($str);
    }
    return mysql_real_escape_string($str);
}

Bis heute habe ich nicht erkennen, dass mysql_real_escape_string eine Datenbankverbindung erforderlich, da ich es nur benutzt habe, als ich habe die Daten Reinigung, bevor sie in der Datenbank zu speichern.

Ich habe versucht, die Funktion auf einem Kontaktformular und bekam die Fehlermeldung „Ein Link zum Server konnte nicht hergestellt werden“. Ich konnte mit der Datenbank verbinden, aber es gibt keine Notwendigkeit, weil ich einfach versuche, die Daten zu sanieren, bevor sie über das Kontaktformular an meine E-Mail gesendet haben werden.

Was ist der beste Weg, um Daten zu sanieren, die in einer MySQL-Datenbank nicht gespeichert werden werden und benötigten diese Daten noch desinfiziert werden?

War es hilfreich?

Lösung

Verwendung filter_var()

http://php.net/manual/en/function.filter -var.php

wie wenn Sie eine E-Mail sanieren:

$_POST['email'] =    filter_var($_POST['email'], FILTER_SANITIZE_EMAIL); 

Nachricht

$_POST['message'] = filter_var($_POST['message'], FILTER_SANITIZE_STRING);

is enogth

Andere Tipps

Der Zweck die Daten mit mysql_real_escape_string von Hygienisierung ist SQL-Injektion zu vermeiden. Wenn Sie nicht SQL verwenden, sind Sie bereits immun.

Männer nicht Gebärmutterhalskrebs bekommen.

Verwenden Sie eine Hygienisierung Funktion entsprechend den speziellen Zeichen, die Sie vermeiden müssen. Idealerweise kann der Streifen nicht etwas, was nicht schädigen wird.

Das ganze Konzept ist falsch. Diese Funktion hilft nicht, nicht für E-Mail nicht einmal für Datenbank.

mysql_real_escape_string nicht "sanieren" nichts. Es ist nur entkommen delimiters und nichts anderes. Nur Syntaxfehler zu verhindern, wenn Sie ein Trennzeichen in Ihren Daten haben:

SELECT * FROM table WHERE name = 'it's me' # error!

nach Daten entkommen sind, Ihre Daten werden 'it\'s me' und es gibt keinen Fehler.
Daher ist diese Funktion nur mit SQL-Abfrage funktioniert und für Daten, in Anführungszeichen nur .

So gibt es keinen Sinn, nur tun mysql_real_escape_string ohne Anführungszeichen mit der Umgebung. mysql_real_escape_string sollte
verwendet werden a) allein. Sachen wie trim oder strip hat hier nichts zu tun
b) unmittelbar vor Abfrage-String zu komponieren und nicht anderswo
c) nur mit Daten, die in Anführungszeichen eingeschlossen werden würden.
d) alle anderen Daten benötigen eine andere Art und Weise von sanitization

Wie für die E-Mail, Sie brauchen keine sanitization es Sie es als Klartext senden. Die einzige Vorsichtsmaßnahme Sie ergreifen müssen, ist gegen Mail-Injektion
Keine große Sache, aber. Einfach nur Benutzereingaben in Nachrichten Körper. zu oder von oder jedem anderen Header nicht in Subjekt. Nachrichtentext nur. Und Sie sind sicher

(Ich bin neu in Stackoverflow, so ich darüber werde den falschen Weg / einen schlechten Job mit dem Styling meiner Antwort Gefühl tat frei lassen Sie mich wissen.)

Korrigieren Sie mich, wenn ich falsch liege, wie ich auch mit dem gleichen Problem zu tun habe gerade jetzt, aber ich glaube nicht, dass die akzeptierte Antwort mit filter_var als Angreifer genug ist, könnte Bypass diese Verwendung von Unicode.

Beispiel: "& # 66; & # 99; & # 99; & # 58;" (Spaces hinzugefügt, so Stackoverflow wird es richtig angezeigt)

Dies würde nicht aus dem String entfernt werden, und später mit ersetzt werden würde „Bcc:“.

Das ist meine Lösung, aber es kann ein besserer Weg geben. Wenn jemand von einem weiß, ich würde gerne hören.

    $string = str_replace("&", "(and)", $string);
    $string = str_replace("#", "(num)", $string);
    $string = str_replace(";", "(semi-colon)", $string);
    $string = str_replace(":", "(colon)", $string);
    $string = str_replace("@", "(at)", $string);
    $string = str_replace("\\", "(backslash)", $string);
    $string = filter_var($string, FILTER_SANITIZE_STRING);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top