[DB] SQLインジェクション

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で使える特殊文字をエスケープして対処する。
   '⇒'
   "⇒"
   &⇒&
   >⇒>
   <⇒&lt;
   半角スペース⇒&nbsp; など

最終更新:2010年12月15日 16:16
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。