SQLインジェクションとは
データベースにアクセスするようなWebサイトなどの
IDやパスワードにDBを操作できるような登録を行い、情報を取得しようとするもの。
例)
|ID|myId|
|pass|'OR'A'='A|
上記のようにした場合、myIdの個人情報を取得する際のSQL文は
SELECT * FROM LIST WHERE ID='$id' AND pass='$pass'
となっていてそれぞれ$id、&passに設定されると考えることができる。
ここでそれぞれに例のような登録がなされた場合、
SELECT * FROM LIST WHERE ID='myId' AND pass=''OR'A'='A'
というSQL文となってしまう。
つまりOR以降が常に真となってしまうためデータベースに不正にアクセスできてしまう。
<対策>
・入力値には半角英数字のみを許可するように制限する。
(※ファイル名で検索を行う場合には記号が入る可能性がある)
・SQLで使える特殊文字をエスケープして対処する。
'⇒'
"⇒"
&⇒&
>⇒>
<⇒<
半角スペース⇒ など
最終更新:2010年12月15日 16:16