叡智の三猿

〜森羅万象を情報セキュリティで捉える

当サイトは、アフィリエイト広告を使用しています。

SQLインジェクション:気になる情報セキュリティ用語

SQLインジェクションは、Webサイトにリクエストを送るHTTPのパラメータにSQLの命令を含ませることで、SQLを採用しているデータベースに直接アクセスして不正操作を行う攻撃手法のことです。

正常なログインで実行されるSQL文を確認します。下図では顧客テーブルに格納された情報から、指定した名前とパスワードに合致する顧客情報をすべて返す構文です。*(アスタリスク)は該当するすべての情報を表します。また、鈴木と123456は、'鈴木' や'123456'という風に、文字列をシングルクォーテーションで囲います。この結果として、鈴木さんの顧客情報が返ってきます。

通常のSQL文

次にSQLインジェクションの構文は下図です。ここで、名前の検索条件を見ると、''(シングルクォーテーション)がふたつ入ります。これは、名前が空ということになります。続いてor(もしくは)が入ります。そして、次に 1=1 が入ります。これを合わせると、名前の検索条件は、「空もしくは1=1」となります。1=1は当たり前です。そのあとに続く、--はコメントと認識され、後の条件は無視されます。したがって、このSQL文はすべての顧客情報を選択することとなります。

SQLインジェクション

SQLインジェクションの対策としては、安全なWebアプリケーションを開発することが必要です。以下がSQLインジェクション攻撃への根本的な解決策となります。

  • プレースホルダを利用する
  • エスケープ処理を行う
  • Webアプリケーションに渡されるパラメータにSQL文を直接指定しない

SQLインジェクション攻撃を防ぐ方法はどれか。

入力中の文字がデータベースへの問合せや操作において,特別な意味をもつ文字として解釈されないようにする。
入力にHTMLタグが含まれていたら,HTMLタグとして解釈されない他の文字列に置き換える。
入力に,上位ディレクトリを指定する文字(../)を含むときは受け付けない。
入力の全体の長さが制限を超えているときは受け付けない。
~「基本情報技術者・平成25年春期」より





答え:ア
エスケープ処理を行うことで、SQLインジェクションを受けた際に、攻撃コードの中の特定の文字列や記号を削除したり置き換え、攻撃を無効化できます。イ:クロスサイトスクリプティング(XSS)を防ぐ方法です。ウ:ディレクトリトラバーサル攻撃を防ぐ方法です。エ:バッファオーバフロー攻撃を防ぐ方法です。