Frage

    

Diese Frage bereits eine Antwort hier:

         

Ich versuche, einen Weg zu entwickeln, um effektiv leicht alle POST zu reinigen und Variablen mit einer einzigen Funktion GET. Hier ist die Funktion selbst:

//clean the user's input
function cleanInput($value, $link = '')
{
    //if the variable is an array, recurse into it
    if(is_array($value))
    {
        //for each element in the array...
        foreach($value as $key => $val)
        {
            //...clean the content of each variable in the array
            $value[$key] = cleanInput($val);
        }

        //return clean array
        return $value;
    }
    else
    {
        return mysql_real_escape_string(strip_tags(trim($value)), $link);
    }
}

Und hier ist der Code, der es nennen würde:

//This stops SQL Injection in POST vars
foreach ($_POST as $key => $value)
{
    $_POST[$key] = cleanInput($value, $link);
}

//This stops SQL Injection in GET vars
foreach ($_GET as $key => $value)
{
    $_GET[$key] = cleanInput($value, $link);
}

Für mich scheint, wie es funktionieren soll. Aber aus irgendeinem Grund zurückbringen, es wird nicht Arrays von einigen Kontrollkästchen ich in einer Form haben. Sie halten herauskommen leer.

Ich habe meinen Code ohne die obige Funktion getestet und es funktioniert gut, ich will nur, dass hinzugefügt wenig Sicherheit drin.

Danke!

War es hilfreich?

Lösung

Was Sie tun, ist nicht genug. Siehe hier .

Andere Tipps

Verwenden Sie filter_input , wenn möglich (php5 +) Es hält es viel sauberer und als Was im bewusst Sie können alles sanieren und validieren Sie müssen es mit könnte.

Sie können mit Filter var Array und zum Beispiel FILTER_SANITIZE_STRING flag, das den gesamten Post-Array filtern

filter_var_array($_POST, FILTER_SANITIZE_STRING) //just an example filter

Es gibt viele verschiedene Filteroptionen auf der w3schools Filter-Referenz

die Rekursion eleganter machen Sie so etwas wie array_map verwenden könnte zum Beispiel:

$_POST = array_map('mysql_real_escape_string',$_POST);

Filter verwenden var, wenn Sie können, obwohl, da diese Art von Ansätzen sind in der Regel schlecht, nur ein Beispiel, obwohl;)

nicht aktiviert Kontrollkästchen werden nicht an den Server gesendet.

können Sie verwenden, array_walk_recursive zu tun, was Sie wollen

Das ist der falsche Weg, um die Reinigung Eingang zu gehen.

Die Anwendung mysql Decke absolut alles in $_POST und $_GET entkommen wird Sie zurückkommen und beißen, wenn Sie die Daten verwenden wollen, nachdem Sie eine Datenbank-Abfrage gemacht haben, aber Sie wollen nicht die Escape-Zeichen in dort .

Verwenden Sie parametrisierte Abfragen mit mysqli oder PDO und Sie müssen nie mysql_real_escape_string() verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top