2011-01-11 13 views
1

Wie kann ich meine Eingabefelder .. wie eingehende Filter $ _POST, $ _GETs etc ..PHP: Filter meine Eingabefelder

Ich bin mit Prepared Statements mit PDO, so i übertragen nur die $ _POST direkt an das PDO (nicht mehr mysql_real_escape_string).

Aber Beispiel ich übertrage ein $ _POST var in ein $ _SESSION und jetzt mache ich es direkt, aber sollte ich es nicht irgendwie filtern? PDO ist nur für die Datenbank, was ist in "allgemein"?

+2

zu breit, wird es abhängen, was die var verwendet wird, wenn und wie Sie sie 'filter' –

+0

wofür werden die Sitzungsdaten verwendet werden? – dqhendricks

Antwort

0

Sie sollten auch die Daten überprüfen. Wenn Sie eine ganze Zahl einfügen, überprüfen Sie sie zuerst mit is_numeric().

Wenn Sie eine E-Mail-Adresse erwarten, vergewissern Sie sich, dass sie mit einer E-Mail-Regexp übereinstimmt.

Sie sollten solche Prüfungen immer an Daten vornehmen, die Sie in die Datenbank einfügen.

Sobald die Daten für das Einfügen in die Datenbank überprüft wurden, können Sie in Sitzung sicher verwenden.

Dies wird dazu beitragen, XSS-Angriffe zu verhindern und Ihre Daten sauber zu halten.

+0

Wie überprüft man den Typ einer Variablen mit 'is_numeric', um XSS-Angriffe zu verhindern? – Stephen

+0

weil '' wird fehlschlagen. wie wird Rogue Image Tags etc. –

+0

danke für Ihre Antwort. Wenn ich $ _SESSION ['attach'] = $ _POST ['image'] habe; und ich werde später $ _SESSION ['attach'] verwenden, um ein Bild anzuzeigen ( Karem

0

Vielleicht gefällt Ihnen das. Nicht perfekt, aber es ist gut.

function clear($data) 
    { 

     $data = addslashes($data); 
     $data = strip_tags($data); 
     $data = mysql_real_escape_string($data); 
     $bir = array('/\//', '/\^/', '/\./', '/\$/', '/\|/', '/\(/', '/\)/', '/\[/', '/\]/', 
      '/\*/', '/\+/', '/\?/', '/\{/', '/\}/', '/\,/'); 
     $iki = array('\/', '\^', '\.', '\$', '\|', '\(', '\)', '\[', '\]', '\*', '\+', '\?', 
      '\{', '\}', '\,'); 
     $data = preg_replace($bir, $iki, $data); 
     return $data; 

    } 

// USAGE 
clear($_GET[]) or clear($_POST[]) 

Alsı, müssen Sie Variablen mit is_numeric, is_boolen, is_string Funktionen überprüfen.

0

Solange Sie einen Ausgang von $_SESSION filtern, müssen Sie ihn vor der Einstellung nicht filtern. Eine gute Möglichkeit, zu filtern, zu erinnern ist, mit einer einfachen raw_ Namenskonvention:

$_SESSION['raw_val'] = $_POST['val']; 

diese Weise können Sie den Wert für später gespeichert haben, wenn Sie möchten, den Wert in einer anderen Art und Weise filtern:

$_SESSION['filter1_val'] = applyFilter1($_SESSION['raw_val']); 
$_SESSION['filter2_val'] = applyFilter2($_SESSION['raw_val']); 

Natürlich kann es eine gute Idee sein, die Größe von $_POST['val'] zu validieren, so dass Sie nicht große Datenmengen in Ihrer Sitzung vars speichern.

0

Try-Eingänge wie

'"'

geben Wenn Ihr Code bricht yu wissen, dass Ihre Eingabe gefiltert werden muss.

Durch regulären Ausdruck für Alphabeten und Numerik filetering kann auch Ihnen helfen

Jedes Forum oder Artikel sagt, dass vorbereitete Aussage frei von SQL-Injektion sind.

Aber ich denke, wenn Sie die vorbereitete Aussage nicht richtig machen, wird es brechen.

Wenn Sie SP verwenden, testen Sie das auch.