インジェクション攻撃が引き起こす危険性

インジェクション攻撃にはいくつかの種類がありますが、ここでは「SQLインジェクション攻撃」について取り上げます。
Webサイトの多くは、ログイン情報や氏名、住所、メールアドレス、場合によってはクレジットカード番号などの重要な情報をデータベースに保有しています。
Webサイトとデータベースとの情報のやり取りに使われるのがSQLという構文です。
このやり取りに脆弱性が存在すると、本来想定していなかったSQL文を送り込まれることで、不正侵入され、データベースに保存されている情報の窃取やWebサイト自体が改ざんされるといった被害が発生します。

先に述べたようにSQL文はWebサイトとデータベースとを繋ぐ非常に重要な構文です。攻撃を受けないようにするためには、SQL文が変更されないようにすることが必要となります。
代表的な対策は「プレースホルダ」を利用することです。
この方法はSQL文がWebサイト制作者の意図した通りにのみ実行され、悪意のある第三者からの入力値によって不正なSQL文の実行を防ぐというものです。

より詳しく説明しますと、プレースホルダには「静的プレースホルダ」と「動的プレースホルダ」があります。

静的プレースホルダ

静的プレースホルダは、SQLを準備する段階でSQL文の構文が確定し、あとからSQL構文が変化することがないため、SQLインジェクションの脆弱性が生じません。

動的プレースホルダ

動的プレースホルダは、バインド処理を実現するライブラリの実装に問題があると、SQL構文が変化する可能性があり、SQLインジェクションの脆弱性が生じる可能性を否定できません。また、文字列連結による組み立ては、アプリケーション開発者のミスによるエスケープ(SQL内のコードを使い、文字や文章に様々な意味や効果を持たせる)漏れが生ずる危険性のほか、エスケープすべき文字がデータベースエンジンの種類や設定によって異なるため、それに合わせた開発が容易でないという問題をかかえています。
また、WebアプリケーションもOSや使用しているアプリケーションに依存しています。つまり、OSやアプリケーションに脆弱性が存在すると、そこから侵入を許すケースもあります。
実際にWordPressのバージョン4.7.1以前にはSQLインジェクションに対する脆弱性が存在しました。

以上のように、SQLインジェクションはWebアプリケーションがデータベースと密接な関係にある以上、避けては通れない脅威です。
Webアプリケーションの設計段階からSQLインジェクションに対する脆弱性がないか精査し、Webサイトを制作することはもちろんのこと、日々の運営においてもOSやアプリケーションのバージョンアップ、更新プログラムの適用などによって不具合が生じていないかどうかを確認するなどの対応が必要となります。

Leave a Reply

Your email address will not be published.