「SQL Injection」の版間の差分
提供: セキュリティ
(同じ利用者による、間の1版が非表示) | |||
行1: | 行1: | ||
− | |||
− | |||
− | |||
− | |||
− | |||
[[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 |
+ | <!-- | ||
+ | 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)