名科辞典―これは何?情報は?にこたえるコンテンツ

トップ SQLインジェクションとは

SQLインジェクションとは―原因と攻撃例、攻撃目的、対策

SQLインジェクションは、アプリケーションのSQL文生成処理の不備を突いたサイバー攻撃です。SQLインジェクションとは何か、原因と攻撃例、攻撃目的、対策方法についてまとめています。

このページの目次です。

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

2. 攻撃例

3. 原因、対策

更新履歴

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

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

SQLとは

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

不正な入力値

  • 名前:名科辞典
  • タイトル:コメント
  • メッセイージ:SQLインジェクションの例です。');delete from `board`;--以降のSQL文無効化のためコメントアウト
#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文に組み立てる際に入力値に害のあるコードが含まれていないか十分にチェックされないことが原因になります。

対策

SQLインジェクション攻撃の被害を防ぐ、最小限にする対策としては、以下のような方法があります。

  • プレースホルダを利用する
  • データベースのアカウントがもつデータベースアクセス権限を必要最小限にする

例に対策を適用

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

更新履歴

このページの更新履歴です。

  • 2016.10.30 SQLインジェクション攻撃の例の説明を詳しくしました。
  • 2016.10.05 記事をUPしました。

戻る

索引

最新記事&お知らせ

名科辞典からのお知らせです。

2017.01.11 Python

Python(Python3)の入門をテーマにした記事です。 Pythonとは何か、意味や概要からインストール、print文の実行、if文、for文とPython3.xで学ぶ入門知識をまとめています。

Pythonのfor文について追記しました。

詳細

2017.01.05 脆弱性

脆弱性とは、読み方は「きじゃくせい」ではなく「ぜいじゃくせい」。もろくて弱い性質や性格のこと。特に情報セキュリティでよく使われる言葉です。 脆弱性の読み方、意味、種類、評価方法、見つけ方についての情報をまとめています。

脆弱性の種類について追記しました。

詳細

2016.12.31 xml

xmlとは何かをテーマに、xmlの読み方や意味、タグ、属性からxmlデジタル署名など、xmlの基礎知識を解説しています。

詳細

それ以前