2011-01-09 5 views
1

SQLインジェクションがサイトのテキストボックスで機能しないかどうかをテストするにはどうすればよいですか?SQLインジェクションがブロックされているかどうかをテストするには?

+0

もっと具体的にする必要があります。テキストをデータベースに入力する前に、どのようにエスケープしていますか? – Savetheinternet

+0

内部コードを表示できますか?テキストボックスの使用方法一般的な方法はありません。使用しているクエリに依存します。 –

答えて

1

通常、入力フィールドのデータがどのように実際の選択に到達するか考える必要があります。 SQL文を終了して別の文を開始するには、そのフィールドにどのような種類のテキストを置くことができるのかを知ったら、

たとえば、コードに'select * from table where id = ' . $_GET['id']というようなことをしていて、script.php?id=0%20OR%20true; drop table table;で電話すると、2つのステートメントを実行できます。

しかし、一般に、連結することによって選択を構築することは避けるべきです。他のレスポンダが示唆しているように、バインドされたパラメータを使う方が良い。

8

バインドされたパラメータなど、設計上不可能であることを保証するメカニズムを使用します。その後、SQLインジェクション抵抗のテストは必要ありません。

別の言い方をすると、アドホックエスケープコードに頼らないでください。それは100%正しいとは思わないでしょう。

+1

それでは、単純なアプリケーションでは成功したかどうかをどのようにテストしますか? –

+0

@Jens:IMHO、この種のことは意味あることに単体テストすることは非常に難しいです。あらかじめ定義された「典型的な」攻撃文字列のリストを使ってテストすることもできますが、実際にはそれほど実証されていません。これは本当にシステムレベルの設計の一貫性の問題です。 –

+0

私は同意します。テストする必要はありません。さもなければ、テストするのはすべて – gbn

1

ただ、この文字列を入力してください:何のエスケープアクションではありません

'"; 

場合、これは確かにあなたのSQLを中断します。

詳細はthis site about better Stringsthis questionを参照してください。

0

通常のチェックでは、すべての特殊記号をフィールドに一度追加して、SQLエラーがないかどうかを確認します。エラーがなく、レコードがDBに正しく挿入されていれば問題ありません。

1

あなたはあなたのコードに対する攻撃を作成するには、このリストを使用することができます。http://ha.ckers.org/sqlinjection/

また、「危険な」文字と文字の組み合わせのリストをアセンブルし、それから(擬似)-random入力値を作成することができます。

関連する問題