Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Anti-SQL-Injection-Prinzip

PHP-Anti-SQL-Injection-Prinzip

(*-*)浩
(*-*)浩Original
2019-10-26 13:18:162463Durchsuche

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.

PHP-Anti-SQL-Injection-Prinzip

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn