2012-04-08 3 views
1

Ich habe mich gefragt, wo in diesem Code $stmt ->real_escape_string($password);, um hinzuzufügen:Wo kann die Zeichenfolge entfernt werden, um die Injektion von MySQL zu verhindern? mysql Injektion zu verhindern

if ($stmt = $this->connect->prepare($sql)) { 
    $stmt->bind_param('ss', $username, $password); 
    $stmt->execute(); 
} 

Ist es nach der Vorbereitung Anweisung oder vor, weil ich gelesen habe, dass ich zum ersten Mal eine Connect-Anweisung haben muss, bevor entkommen , also meine Vermutung wäre nach der Vorbereitung Aussage, bin ich richtig?

Und was sollte ich noch über mysql injection wissen?

+7

bind param macht immer das lol – dynamic

+1

Sie müssen entkommen, wenn "bauen" die '$ sql' Zeichenfolge, wenn Sie innerhalb Daten (Strings) setzen, die von" außerhalb "kommen; Andernfalls ist die Bindung sicher. – ShinTakezou

+1

@ yes123 - Ich wusste das nicht :) Also muss ich diese Escape-Anweisung nicht hinzufügen, weil Bindung immer entkommen wird? – Roland

Antwort

4

Sie nicht.

Teil von was vorbereitete Aussagen tun, ist die Daten für Sie zu entkommen. Du musst also nichts entkommen, wenn du es als Param binden willst. Tatsächlich, wenn Sie es hinzufügen würden, würden Sie Backslashes und so an den ungeraden Plätzen sehen.

Sie müssen real_escape_string nur verwenden, wenn Sie Variablen direkt in Ihre SQL-Zeichenfolge als Werte einfügen. Und wenn jemand das tut, wollen sie vielleicht ihr Verständnis für den ganzen Punkt der vorbereiteten Aussagen überprüfen. :)

Verwandte Themen