![]() |
ゆっくり編集していってね!!! 編集者の方へ: 2021年5月19日 23時59分頃の終了を目指し作業しております。 ゆっくり編集していった結果が編集競合にならない様にご協力お願いします。 |
インジェクション攻撃とは、不正な入力によりサーバーを誤動作させる攻撃手法である。
商用Webページなどには一般ユーザーからの入力を受け付けるものも多い。こういったページはユーザーからの入力をサーバーが受け取った後、入力情報を元に適切な処理が行われる仕組みになっている。
ところがサーバーに脆弱性があると、入力情報の中にコンピューターに対する命令と解釈される文字列を埋め込むことによって意図しない動作を行わせることができる。これがインジェクション攻撃である。
イメージを掴みたい人は下記の9分40秒あたりから12分過ぎまでを参照のこと。
データベースサーバーのデファクトスタンダードに近い存在であるSQLサーバーを標的にインジェクション攻撃を行うのがSQLインジェクションである。一般ユーザーの入力は何らかの形でSQLサーバーに渡されることが多いので狙われやすい。
SQLサーバーには各ユーザーの個人情報や運営企業が苦労して集めたデータなど大事な情報が詰まっていることが多い。そこから任意の情報が読み出されたり、書き込まれたり、ひどい場合は全部抜き取られた上で消去されたりする危険もある。
SQLサーバーへの命令ではなく、OS用のコマンドを入力に埋め込む方法。ユーザーの入力がOSに渡される仕様のサーバーというのは少ないはずだが、もし実行されるとOSそのものが乗っ取られ、OS上で動くサーバープログラムに過ぎないSQLサーバーが乗っ取られたときより被害は大きい。
攻撃者が直接入力を行わないケース。不正なHTTPヘッダを送信するリンクを被害者にクリックさせて、ヘッダの内容をそのまま表示に用いるサイトで不正な内容を表示させる。
ユーザーの入力内容確認のためにユーザー入力全文を表示するサイトは多いが、ここにHTMLと解釈される文字列を埋め込むと、不正な入力確認画面を表示できる。
HTMLには<script>タグでJavaScriptを埋め込んだり<iframe>で別のサイトを表示できたりすことを考えると、様々な被害が考えられる。XSS攻撃などに使用される。
一般ユーザーからの入力は疑ってかかるのが原則である。
入力欄に、処理系で文法上の意味を持つ文字や記号の入力を禁止する。あるいは、サーバー側で想定している文字列の入力のみを許可する。
大抵の処理系は文法上意味のある文字(記号)を、文字列内で文法上の意味を持たないただの文字として使用するためのエスケープという記法が用意されている。
ユーザーからの入力にインジェクション攻撃を意図した文字列があったとしても、処理系に渡す前にエスケープ処理すれば、文法上の解釈を受けることなくただの文字として仕様通り処理される。サニタイズとも呼ばれる。
エスケープ処理を1回余計にやってしまって「>」が「>」になるといったようにエスケープ処理が残ったまま表示されてしまったりすることがあるのはご愛嬌。
スクリプト言語処理系だからユーザーの入力が命令として解釈される。コンパイルしてバイナリにしてしまえばユーザーが入力した文字列とコンピューターへの命令が混ざることはない、というコンセプト。
SQLではプリペアドステートメントと呼ばれる。
ニコニコ大百科:グラフ機能のダウンロード版(サポート終了済み)にはHTMLインジェクション攻撃が可能である。といってもダウンロード版なので、自分で自分にインジェクション攻撃できるだけなので、特にセキュリティ上の意味はない。ユーザーが色以外も指定できたら何か面白いことが出来ないかなと思っていたのでこれは仕様である。
急上昇ワード改
最終更新:2025/12/09(火) 09:00
最終更新:2025/12/09(火) 09:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。