このページの本文へ

前へ 1 2 次へ

セキュリティの素朴な疑問を解く 第4回

Q&A形式でセキュリティの基礎を学ぼう

SQLインジェクションやXSSって何されるの?

2009年06月03日 09時00分更新

文● 伊藤玄蕃

  • この記事をはてなブックマークに追加
  • 本文印刷

SQLインジェクションへの対策

 このように、SQLインジェクションが生じるのはアプリケーション側に原因がある。したがって、対策はWebアプリケーションの脆弱性を修正することである。

 理屈の上では「ブラウザから入力された値を適切に処理しないで、SQL文を組み立てる」ことが原因であるから、対策は「入力された値を適切に処理する」ことだ。SQL文で特別な意味を持つ記号文字(上の例では「'」)を素通しさせないといった、いわゆる「エスケープ処理」を行なうことで、意図しないSQL文を生成することを防ぐことができる。SQLではこういった特別な意味を持つ記号文字が複数ある。それらはデータベースエンジンごとに異なるため、それぞれに適した対策が必要である。また、データベースエンジンによっては、安全なSQL文を生成する「バインド機構」や、エスケープ処理を行なうAPIを用意している製品があるのでそれらを活用するとよい。

 現在では、WAF(Webアプリケーションファイアウォール)も注目を浴びている。WAFはその名の通り、Webアプリケーションに対する攻撃を防御する専用のファイアウォールである。これによりWebサーバとクライアントの間に設置することで、アプリケーション層での通信のやり取りを監視し不正なアクセスを遮断できる。

まだあるWebアプリケーションの脆弱性

 SQLインジェクションのようなWebアプリケーションの脆弱性を突く攻撃はほかにもある。情報処理推進機構(IPA)によると、2004年7月から2008年6月末の間に届出があったWebサイトへの攻撃手段の中で、もっとも多かったのが「クロスサイトスクリプティング(XSS:Cross Site Scripting)」である。

 XSSは、掲示板やブログなどユーザーが入力した内容をWebページとして出力するWebアプリケーションを利用する。たとえば、掲示板に悪意のあるスクリプト(JavaScriptなど)を埋め込んだリンクを貼り付け、そのページを閲覧したブラウザにスクリプトを実行させるという攻撃だ。このように、複数のサイトをまたがった攻撃なのでこの名前がついている。埋め込まれるスクリプトの内容には、Cookie情報を送信させてユーザーIDやパスワードなどを盗み出すものや、キーロガーなどのスパイウェアを勝手にダウンロードするものなどがある。この仕組みを使ったフィッシングも現実に存在している(図2)。

図2 XSSを利用したフィッシングの例

まとめ

 クロスサイトスクリプティングもSQLインジェクションと同様に、Webアプリケーションが「ブラウザから入力された値を適切に処理しない」ために生じる攻撃である。したがって、入力された値を適切に処理していれば防ぐことができる攻撃である。データベースを使ったサイトや、掲示板やブログなどのサイトを運営する場合は、これらの脆弱性に注意して安全なサイト構築を心がけよう。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事
  • 角川アスキー総合研究所
  • アスキーカード