情報セキュリティの基礎
ログインの画面で、パスワードの欄に ' OR '1'='1 のような文字列を入力されると、パスワードを知らなくてもログインできてしまうWebアプリケーションがある。この攻撃の名前はどれか。
- ASQLインジェクション
- Bクロスサイトスクリプティング
- Cディレクトリトラバーサル
答えと解説を見る
正解:A. SQLインジェクション
SQLインジェクションは、Webアプリケーションが、利用者の入力をそのまま文字列としてつなげてデータベースへの命令(SQL文)を組み立てていることを悪用する攻撃です。例えば「パスワードが '入力値' と等しい」という条件を作るところに ' OR '1'='1 が入ると、引用符で文字列が閉じられ、「または '1' と '1' が等しい」という常に成り立つ条件が付け加わってしまいます。その結果、パスワードを知らなくても条件が成り立ち、ログインできてしまいます。同じ方法で、データの盗み出しや書き換え、削除が行われるおそれもあります。根本的な対策は、入力を命令の一部として解釈させない仕組み(プレースホルダを使うプリペアドステートメント)を使うことです。
- A. 正しい。入力でSQL文の意味を変えてしまう攻撃がSQLインジェクションです。
- B. クロスサイトスクリプティングは、Webページに不正なスクリプトを埋め込み、閲覧者のブラウザで動かす攻撃です。
- C. ディレクトリトラバーサルは、ファイル名の指定に ../ などを入れて、公開していないファイルを読み出す攻撃です。