Heim > Artikel > Backend-Entwicklung > PHP-Anti-SQL-Injection-Prinzip
SQL-Injection: Durch das Einfügen von SQL-Befehlen in Web-Formularübermittlungen oder die Eingabe von Abfragezeichenfolgen für Domänennamen oder Seitenanfragen wird der Server letztendlich dazu verleitet, bösartige SQL-Befehle auszuführen.
Vorbereitete Anweisungen sind für die SQL-Injection sehr nützlich, da nach dem Senden von Parameterwerten unterschiedliche Protokolle verwendet werden, um die Legitimität der Daten sicherzustellen. Bei der Vorverarbeitung handelt es sich um eine kompilierte Vorlage des SQL, das Sie ausführen möchten, das mithilfe variabler Parameter angepasst werden kann. (Empfohlenes Lernen: PHP-Video-Tutorial)
Verteidigungsmethode eins
mysql_real_escape_string – Escape der Zeichenfolge, die in den Sonderzeichen der SQL-Anweisung verwendet wird , unter Berücksichtigung des aktuellen Zeichensatzes der Verbindung !
$sql = "select count(*) as ctr from users where username ='".mysql_real_escape_string($username)."' and password='". mysql_real_escape_string($pw)."' limit 1";
Methode 2:
Magic_quotes_gpc öffnen, um SQL-Injection zu verhindern. Es gibt eine Einstellung in php.ini: magic_quotes_gpc =
Diese ist standardmäßig deaktiviert. Wenn sie aktiviert ist, werden vom Benutzer übermittelte Abfragen automatisch in SQL konvertiert, z. B. „ in „. usw., um zu verhindern, dass SQL-Injektionen den Unterschied machen.
Wenn magic_quotes_gpc=Off, verwenden Sie die Funktion addslashes().
Methode 3:
Benutzerdefinierte Funktion
function check_param($value=null) { #select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile $str = 'select|insert|and|or|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile'; if(!$value) { exit('没有参数!'); }elseif(eregi($str, $value)) { exit('参数非法!'); } return true; } function str_check( $value ) { if(!get_magic_quotes_gpc()) { // 进行过滤 $value = addslashes($value); } $value = str_replace("_", "\_", $value); $value = str_replace("%", "\%", $value); return $value; } function post_check($value) { if(!get_magic_quotes_gpc()) { // 进行过滤 $value = addslashes($value); } $value = str_replace("_", "\_", $value); $value = str_replace("%", "\%", $value); $value = nl2br($value); $value = htmlspecialchars($value); return $value; }
Das obige ist der detaillierte Inhalt vonPHP-Anti-SQL-Injection-Prinzip. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!