「SQL Injection」の版間の差分

提供: セキュリティ
移動: 案内検索
 
(同じ利用者による、間の1版が非表示)
行1: 行1:
<!--
 
vim: filetype=mediawiki
 
-->
 
 
 
 
[[SQL Injection]] (SQLインジェクション) とは、意図しない SQL 文を入力され、データの改ざん、漏洩、破壊などを行う行為です。
 
[[SQL Injection]] (SQLインジェクション) とは、意図しない SQL 文を入力され、データの改ざん、漏洩、破壊などを行う行為です。
  
読み方
+
'''読み方'''
 
;[[SQL Injection]]:えすきゅーえるいんじぇくしょん
 
;[[SQL Injection]]:えすきゅーえるいんじぇくしょん
 
; SQL インジェクション: えすきゅーえるいんじぇくしょん
 
; SQL インジェクション: えすきゅーえるいんじぇくしょん
行14: 行9:
  
 
== 概要 ==
 
== 概要 ==
 
 
アプリケーションが想定しない SQL 文を実行させられる。
 
アプリケーションが想定しない SQL 文を実行させられる。
 
SQL 文を挿入されることにより、データベースを不正の操作する攻撃手法のこと。
 
SQL 文を挿入されることにより、データベースを不正の操作する攻撃手法のこと。
  
 
[[脆弱性]]問題の多くは、[[SQL Injection]] であるという報告があります。
 
[[脆弱性]]問題の多くは、[[SQL Injection]] であるという報告があります。
 
 
== 被害 ==
 
== 被害 ==
 
 
 
  
行28: 行20:
 
* システムコマンドの実行
 
* システムコマンドの実行
  
* 顧客個人情報の管理に、RDB が利用されることが多く、攻撃の対象となり易い。
+
* 顧客個人情報の管理に、RDB(リレーショナルデータベース) が利用されることが多く、攻撃の対象となり易い。
 
* 確実な対応がなされてない場合、クレジットカード情報などの情報が漏洩する。
 
* 確実な対応がなされてない場合、クレジットカード情報などの情報が漏洩する。
 
 
== 対策 ==
 
== 対策 ==
 
+
* プログラム外から入力を元にSQL文を組み立てる場合は、[[プリペアドステートメント]] (prepqred statement) / '''プレースホルダ''' を利用して下さい。
* プログラム外から入力を元にSQL文を組み立てる場合は、[[プリペアドステートメント]] (prepqred statement) / [[プレースホルダ]] を利用して下さい。
+
 
+
 
== セカンドオーダーSQLインジェクション ==
 
== セカンドオーダーSQLインジェクション ==
 
 
セカンドオーダーSQLインジェクションは、データベースなどにストアされたデータを用いて、 prepared statement などを使わずに、SLQ文を組み立てたときに発生する[[SQL_Injection]]のことです。
 
セカンドオーダーSQLインジェクションは、データベースなどにストアされたデータを用いて、 prepared statement などを使わずに、SLQ文を組み立てたときに発生する[[SQL_Injection]]のことです。
 
データベースから読み込んだデータをSQL文で利用する場合にもprepared statement が必要です。
 
データベースから読み込んだデータをSQL文で利用する場合にもprepared statement が必要です。
 
 
== SQL Injection のタイプ ==
 
== SQL Injection のタイプ ==
 
 
* Union Query based
 
* Union Query based
 
* System Stored Procedure
 
* System Stored Procedure
行49: 行35:
 
* SQL Injection Error Based
 
* SQL Injection Error Based
 
* SLQ Injection Blind
 
* SLQ Injection Blind
 
 
== サンプル ==
 
== サンプル ==
 
 
この例では、Host='1' の後ろからですが、スペースで区切らなくても、SQL文を書くことができます。
 
この例では、Host='1' の後ろからですが、スペースで区切らなくても、SQL文を書くことができます。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
行67: 行51:
 
2 rows in set (0.00 sec)
 
2 rows in set (0.00 sec)
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
== 関連情報 ==
 
== 関連情報 ==
 
 
* [[脆弱性]]
 
* [[脆弱性]]
 
* [[MySQL]]
 
* [[MySQL]]
* [[PDO]]
+
* PDO
 +
<!--
 +
vim: filetype=mediawiki
 +
-->

2016年1月11日 (月) 21:35時点における最新版

SQL Injection (SQLインジェクション) とは、意図しない SQL 文を入力され、データの改ざん、漏洩、破壊などを行う行為です。

読み方

SQL Injection
えすきゅーえるいんじぇくしょん
SQL インジェクション
えすきゅーえるいんじぇくしょん


概要

アプリケーションが想定しない SQL 文を実行させられる。 SQL 文を挿入されることにより、データベースを不正の操作する攻撃手法のこと。

脆弱性問題の多くは、SQL Injection であるという報告があります。

被害

  • 情報漏えい
  • 情報の改ざん
  • システムコマンドの実行
  • 顧客個人情報の管理に、RDB(リレーショナルデータベース) が利用されることが多く、攻撃の対象となり易い。
  • 確実な対応がなされてない場合、クレジットカード情報などの情報が漏洩する。

対策

  • プログラム外から入力を元にSQL文を組み立てる場合は、プリペアドステートメント (prepqred statement) / プレースホルダ を利用して下さい。

セカンドオーダーSQLインジェクション

セカンドオーダーSQLインジェクションは、データベースなどにストアされたデータを用いて、 prepared statement などを使わずに、SLQ文を組み立てたときに発生するSQL_Injectionのことです。 データベースから読み込んだデータをSQL文で利用する場合にもprepared statement が必要です。

SQL Injection のタイプ

  • Union Query based
  • System Stored Procedure
  • End of Line Comment
  • Tautology
  • Illegal/Logically Incorrent Query
  • SQL Injection Error Based
  • SLQ Injection Blind

サンプル

この例では、Host='1' の後ろからですが、スペースで区切らなくても、SQL文を書くことができます。

where Host='1'or'1'='1';
mysql> select Host from db where Host='1'or'1'='1';
+------+
| Host |
+------+
| %    |
| %    |
+------+
2 rows in set (0.00 sec)

関連情報