Heim > Artikel > Backend-Entwicklung > So verhindern Sie SQL-Injection in PHP (1)
(1) mysql_real_escape_string – Escapezeichen für Sonderzeichen in Zeichenfolgen, die in SQL-Anweisungen verwendet werden, unter Berücksichtigung des aktuellen Zeichensatzes der Verbindung
So verwenden Sie es:
<code>$sql = "<span><span>select</span><span>count</span>(*) <span>as</span> ctr <span>from</span> users <span>where</span> username =<span>'".mysql_real_escape_string($username)."'</span><span>and</span> password=<span>'". mysql_real_escape_string($pw)."'</span> limit <span>1</span><span>";</span></span></code>
Verwenden Sie
<code><span><span>mysql_real_escape_string</span><span>()</span></span></code>
als Wrapper um Benutzereingaben, um böswillige SQL-Injection in Benutzereingaben zu vermeiden.
(2) Aktivieren Sie magic_quotes_gpc, um SQL-Injection zu verhindern
Es gibt eine Einstellung in php.ini: magic_quotes_gpc = Off
Dies ist standardmäßig deaktiviert. Wenn es aktiviert ist, wird die vom Benutzer übermittelte SQL-Abfrage automatisch konvertiert,
Beispielsweise spielt die Konvertierung von „ in „ usw. eine wichtige Rolle bei der Verhinderung von SQL-Injection.
Wenn magic_quotes_gpc=Off, verwenden Sie die Funktion addslashes()
(3) Benutzerdefinierte Funktion
<code><span><span>function</span><span>inject_check</span><span>(<span>$sql_str</span>)</span> {</span><span>return</span> eregi(<span>'select|insert|and|or|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile'</span>, <span>$sql_str</span>); } <span><span>function</span><span>verify_id</span><span>(<span>$id</span>=null)</span> {</span><span>if</span>(!<span>$id</span>) { <span>exit</span>(<span>'没有提交参数!'</span>); } <span>elseif</span>(inject_check(<span>$id</span>)) { <span>exit</span>(<span>'提交的参数非法!'</span>); } <span>elseif</span>(!is_numeric(<span>$id</span>)) { <span>exit</span>(<span>'提交的参数非法!'</span>); } <span>$id</span> = intval(<span>$id</span>); <span>return</span><span>$id</span>; } <span><span>function</span><span>str_check</span><span>( <span>$str</span> )</span> {</span><span>if</span>(!get_magic_quotes_gpc()) { <span>$str</span> = addslashes(<span>$str</span>); <span>// 进行过滤 </span> } <span>$str</span> = str_replace(<span>"_"</span>, <span>"\_"</span>, <span>$str</span>); <span>$str</span> = str_replace(<span>"%"</span>, <span>"\%"</span>, <span>$str</span>); <span>return</span><span>$str</span>; } <span><span>function</span><span>post_check</span><span>(<span>$post</span>)</span> {</span><span>if</span>(!get_magic_quotes_gpc()) { <span>$post</span> = addslashes(<span>$post</span>); } <span>$post</span> = str_replace(<span>"_"</span>, <span>"\_"</span>, <span>$post</span>); <span>$post</span> = str_replace(<span>"%"</span>, <span>"\%"</span>, <span>$post</span>); <span>$post</span> = nl2br(<span>$post</span>); <span>$post</span> = htmlspecialchars(<span>$post</span>); <span>return</span><span>$post</span>; }</code>
http://www.phpddt.com/php/228.html
Das Obige stellt die Methode (1) zur Verhinderung der SQL-Injection in PHP vor, einschließlich der relevanten Inhalte. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.