PHPでSQLインジェクションを防ぐ方法(1)

WBOY
リリース: 2016-07-29 09:15:00
オリジナル
990 人が閲覧しました

(1) mysql_real_escape_string – 接続の現在の文字セットを考慮して、SQL ステートメントで使用される文字列内の 特殊文字 をエスケープします
使用方法は次のとおりです。

<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>
ログイン後にコピー

ユーザー入力への悪意のある SQL インジェクションを回避するために、ユーザー入力のラッパーとして

<code><span><span>mysql_real_escape_string</span><span>()</span></span></code>
ログイン後にコピー

を使用します。
(2) SQL インジェクションを防ぐために、magic_quotes_gpc をオンにします
php.ini に設定があります: magic_quotes_gpc = Off
これはデフォルトではオフになっています。オンにすると、ユーザーが送信した SQL クエリが自動的に変換されます。 たとえば、「 」を「 」などに変換することは、SQL インジェクションを防ぐ上で重要な役割を果たします。
magic_quotes_gpc=Off の場合は、addslashes() 関数を使用します
(3) カスタム関数

<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

以上、PHPにおけるSQLインジェクションを防ぐ方法(1)をあらゆる面を含めて紹介しましたが、PHPチュートリアルに興味のある友人の参考になれば幸いです。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート