Webセキュリティ(3)-SQL Injection

今度はSQL Injection

これは、Script InsertionXSSと違ってJavaScriptは必要ありません。

【概要】
削除フォーム等でSQLが必ず、真になるように入力し本来考慮していない動作をさせる

【攻撃】
フォームからのSQL、where句を必ず真にするようにして悪意のあるSQLに変換する

例1(SQL):
0 or 1 /*(コメントアウト文)

例2(SQL):
0 or 1; delete from table /*

【防御】
SQLサニタイズを実施する(整数値:intval、文字列:addslashes、浮動小数点:doubleval)

例(PHP):
"SELECT COUNT(*) FROM bbs
WHERE id='".intval($_POST["id"]).
"' AND pass<>‘”.addslashes($_POST[”pass”]).”‘”

直接関係ないですが、チェックをereg等の関数でおこなうのは危険です。 eregはバイナリセーフでないため、ヌルバイト文字(\0)を入れられると フィルタリングは意味を持たなくなります


About this entry