情報処理のWeb教科書―IPA情報処理試験対策のお供に!

SQLインジェクションとは―メカニズム、攻撃例、対策について

トップ 情報処理の知識体系 テクノロジ系 技術要素 セキュリティ 情報セキュリティとは 攻撃手法 サイバー攻撃の種類 SQLインジェクション

SQLインジェクションは、アプリケーションのSQL文生成処理の不備を突いたサイバー攻撃です。SQLインジェクションのメカニズム、攻撃例、対策、IPA情報処理試験の問題など、サイバー攻撃の種類の一つSQLインジェクションについての情報をまとめています。

目次

この記事の目次です。

1. SQLインジェクションとは

2. 攻撃例

3. 原因、対策

4. SQLインジェクションに関連したIPA情報処理試験の過去問題

もっと知識を広げるための参考

更新履歴

1. SQLインジェクションとは

SQLインジェクションとは、Webページ上の入力フォームなどパラメータとして送信される文字列から生成されたSQL文を不正なものにするようにパラメータを変更して、 Webアプリケーションを誤動作させたり、データベースの内容を不正に閲覧したりするサイバー攻撃のことをいいます。

SQLとは

SQLとは、簡単に言うと「リレーショナルデータベースを管理するソフトと話すための言語」です。

詳細

攻撃目的

SQLインジェクションを利用したサイバー攻撃の主な目的は以下になります。

2. 攻撃例

SQLインジェクションは、たとえば、Webアプリケーションの入力データとしてデータベースへの命令文を構成するデータを入力し、想定外のSQL文を実行します。 SQLインジェクションの攻撃例についてまとめていきます。

以下は掲示板などのコメント投稿処理の例になります。

正常な入力値

まずは、正常な処理を見ていきます。

正常な入力値の場合、アプリケーションで組み立てたSQL文は以下になります。

#ASPの例
objCon.Open
strSQL = "INSERT INTO board (USERID, TITLE, MESSAGE) VALUES ('太郎', 'コメント', 'コメントです。');"
objRS.Open strSQL, objCon, 3

不正な入力値

#ASPの例
objCon.Open
strSQL = "INSERT INTO board (USERID, TITLE, MESSAGE) VALUES (" _
         "'太郎', 'コメント', 'SQLインジェクションの例です。');delete from `board`;--以降のSQL文無効化のためコメントアウト');"
objRS.Open strSQL, objCon, 3

SQL文が不正にかえられ、しかもテーブルのデータが消されてしまいます。

3. 原因、対策

SQLインジェクションの原因、対策についてまとめていきます。

原因

SQLを実行するアプリケーションで、SQL文のリテラル部分の生成処理のチェック不備が原因です。

フォームや入力値、GETやPOSTなどの入力値を使用して、実行するSQL文に組み立てる際に入力値に害のあるコードが含まれていないか十分にチェックされないことが原因になります。

対策

対策方法はいくつかあります。複数合わせて多層防衛するのが望ましいです。

Webアプリケーションの実装における対策

SQLインジェクション攻撃を防ぐ方法は、SQLとして解釈されないように文字列をチェックします。

対策としては、以下のような方法があります。

Webアプリケーションの実装以外の対策

入力された文字列が、データベースへの問合せや操作において、特別な意味を持つ文字として解釈されないようにします。

対策としては、以下のような方法があります。

例に対策を適用

上述の攻撃例の場合、対策により、プレースホルダによりSQL文が変更される文字を事前に検出、もし変更されてもDELETE文のような文は権限が無く実行できなくなります。

4. SQLインジェクションに関連したIPA情報処理試験の過去問題

以下ではSQLインジェクションに関連したIPA情報処理試験の過去問とその解説をまとめています。

もっと知識を広げるための参考

更新履歴

戻る

スポンサーリンク

情報処理の知識体系

各試験の問題と解説

ランダム出題・採点アプリ

プログラミング

スポンサーリンク