Q.031攻撃の手口

SQLインジェクションとはどんな攻撃で、どう防ぎますか?

公開日  運営:サイバー攻撃・情報漏洩の疑問100運営事務局

SQLインジェクションは、Webサイトの検索欄やログイン欄などの入力値をそのままデータベースへの命令(SQL)に組み込んでいる作りの弱点を突き、データベースの中身を盗み出したり、書き換えたり、消したりする攻撃です。会員情報やカード情報の大量漏洩の原因になってきました。根本対策は、入力値を命令の一部として扱わない作り(プレースホルダ)にすることです。

入力値が「命令」として扱われてしまうことが問題危ない作り入力値を命令にそのままつなぐ→命令が書き換わる安全な作りプレースホルダで入力値は「値」として扱う→命令は変わらない
入力値が「命令」として扱われてしまうことが問題

なぜ起きるのか

プログラムが、利用者の入力を文字列としてつなぎ合わせてデータベースへの命令を作っていると、入力の中に命令の一部となる記号を混ぜられたとき、開発者が意図しない命令が実行されてしまいます。

開発者が取るべき対策

対策位置づけ
プレースホルダ(パラメータ化クエリ)でSQLを組み立てる根本的な解決
エラーメッセージにデータベースの詳細を表示しない情報を与えない
データベースのアカウントの権限を必要最小限にする被害を小さくする
WAFで攻撃的な通信を止める保険的な対策(解説)
リリース前と定期的な脆弱性診断見落としを見つける(解説)

発注者が確認すること:Webサイトの制作を外部に頼む場合は、IPAの「安全なウェブサイトの作り方」に沿った対策をしているか、診断を受けたかを確認しましょう(セキュアな開発)。

出典:IPA「安全なウェブサイトの作り方」

↑