「セキュリティに対する重要性は理解したけれど、用語が難しくて」という声を聞くことがよくあります。そんな方にセキュリティの頻出用語を解説します。
今回は、「SQLインジェクション」についてです。
SQLインジェクションは、Webアプリケーションに対する攻撃手法の1つです。
SQLインジェクションのSQL(エスキューエル。欧米ではシークェルと発音することが多い)とは、リレーショナルデータベースに対して、データを追加、削除するなどの操作を行うための言語です。リレーショナルデータベースで著名なオラクルデータベース、MS SQL Server、MySQL、PostgreSQLなどを操作するためには、SQLを利用します。インジェクションとは、英語ではInjectionであり、「注入」という意味です。
SQLインジェクションとは、データを不正に取得するなど悪意を持ったSQL文を注入され(埋め込まれて)、データベースを不正に操作されることをいいます。
インターネット上でWebサイトを利用したサービスの提供が一般的になっています。一般消費者向けサイトでは、例えば、ログインID、パスワード、クレジットカード情報など重要な個人情報が入力、保存していることが多くあります。また、企業向けのシステムにおいても、受発注情報などのビジネス上大切な情報が保存されていることも珍しくありません。
これらの情報は、通常データベースに保存されており、ウェブからの命令によって適切な情報が引き出されたり、あるいは修正されたりします。このとき、WebアプリケーションはSQLを利用します。
SQLインジェクションでは、このSQLを利用することを利用して、不正なSQL文を実行させることで個人情報などを入手します。また、SQLのストアドプロシージャ等を利用してOS コマンドの実行することで、システムの乗っ取りを図ったり、別のシステムへの攻撃に踏み台にすることも可能になります。
SQLインジェクション攻撃に対応するためには、アプリケーション開発の段階でSQLに特別な意味を持つ記号文字(「’」「;」など)に対して、素通しにさせないなどの「エスケープ処理」を実施するなど、安全なウェブサイトの構築が必要です。
独立行政法人 情報処理推進機構では、知見をまとめたガイドを公開しています。