SQL インジェクション攻撃では、ユーザーはフォームまたは GET クエリ文字列を操作してデータベース クエリに情報を追加します。たとえば、単純なログイン データベースがあるとします。このデータベースの各レコードには、ユーザー名フィールドとパスワード フィールドがあります。ユーザーがログインできるようにするログイン フォームを作成します。简. 簡単なログインフォーム
& & lt;
& lt;/head & lt; & lt; b ODY & GT; フォーム アクション ="verify.php" メソッド "post">e388a4556c0f65e1904146cc1a846bee5796acc501e44225aa7ebfd95efa11edユーザー名8c1ecd4bb896b2264e0711597d40766c input type='text' name='user' id=' user'/>
94b3e26ee717c64999d7867364b1b4a3
e388a4556c0f65e1904146cc1a846bee6e0b6e054241b431a0bddcda3f7eb0ecパスワード8c1ecd4bb896b2264e0711597d40766c
1766be03f31f1455e2ed7318587fe63494b3e26ee717c64999d7867364b1b4a3e388a4556c0f65e1904146cc1a846bee5c662c096ff1d2070c867bd0529fb3dc94b3e26ee717c64999d7867364b1b4a3 f5a47148e367a6035fd7a2faa965022e 36cc49f0c466276486e50c850b7e4956 081a934c7ac7a6b28b4ef3b648acdd09
このフォームは、ユーザーが入力したユーザー名とパスワードを受け入れ、ユーザー入力を verify.php という名前のファイルに送信します。このファイルでは、PHP はログイン フォームからのデータを次のように処理します。
リスト 6. 安全でない PHP フォーム処理コード
| afc6dd10eaa3d9e6e3ae9eb5c445f5b0
このコードは問題ありませんね?世界中の数百 (数千ではないにしても) の PHP/MySQL サイトがこのコードを使用しています。どうしたの? 「ユーザー入力は信頼できない」ということを覚えておいてください。ここではユーザーからの情報はエスケープされないため、アプリケーションは脆弱なままになります。具体的には、あらゆる種類の SQL インジェクション攻撃が可能です。
たとえば、ユーザーがユーザー名として foo を入力し、パスワードとして ' または '1'='1 を入力すると、実際には次の文字列が PHP に渡され、クエリが MySQL に渡されます。
このクエリは常にカウント 1 を返すため、PHP はアクセスを許可します。ハッカーは、パスワード文字列の末尾に悪意のある SQL を挿入することで、正規のユーザーになりすますことができます。
この問題の解決策は、PHP の組み込み mysql_real_escape_string() 関数をユーザー入力のラッパーとして使用することです。この関数は文字列内の文字をエスケープするため、文字列内でアポストロフィなどの特殊文字を渡すことができなくなり、MySQL が特殊文字に基づいて動作できるようになります。リスト 7 はエスケープされたコードを示しています。
リスト 7. 安全な PHP フォーム処理コード
399acfe40f15fa7a3066638a0075a977
mysql_real_escape_string() をユーザー入力のラッパーとして使用すると、ユーザー入力での悪意のある SQL インジェクションを回避できます。ユーザーが SQL インジェクションを介して不正なパスワードを渡そうとすると、次のクエリがデータベースに渡されます:
$sql = "select count(*) as ctr from users where username='foo' and password='' or '1'='1' limit 1";
データベース内にはそのようなパスワードに一致するものはありません。たった 1 つの簡単な手順で、Web アプリケーションの大きな穴を塞ぐことができました。ここでの経験則は、SQL クエリのユーザー入力は常にエスケープする必要があるということです。
安全のため、信頼できるソースからの URL のみを開いてください 出典: http://hi.baidu.com/luzheng22/blog/item/af49aca48ea018f19052eeea.html