サイト攻撃 Script Insertion @PHP技術

こんばんはー
C言語もひと段落し、PHP技術へ移っていきます。
ここからは、PHPサイバーテロの技法という本を使って実際に試していきながら学習していきます。

では、1章は概要でした。

  • Webアプリの脆弱性はどこにでもある。
  • 脆弱性を知ることはコード文法のすぐ次に覚えるべきもの。
  • 攻撃方法を知って体系的、網羅的に学習する。


→穴が無いWebサイトを目指すことが重要。とのことです。



では、2章のクラッキングの実体験から実際に攻撃してみます。
ここで攻撃対象となるサイトは、本に書かれているサイトからダウンロードした掲示スクリプトです。


↓サイトイメージ


  • 2-2Script Insertion攻撃側

このサイトにScript Insertionをします。
具体的には、Script InsertionHTMLやjsなどを入力します。
そうすることで意図としていない挙動をさせてしまいます。

例えば、

<script>location.href="http://yahoo.co.jp";</script>

を入力して掲示板に投稿すると。。。
掲示板を表示しようとすると、勝手に http://yahoo.co.jp へ飛ばされてしまいます。
Script Insertionの危険な点ですが、javascriptが実行されるので、何をされるかわからない危険性があるということでしょうか。
例を参考にすると飛び先に仕掛けがされている(ワームなどが仕込まれている)サイトだと、ユーザーが危険にさらされます。

  • 2-2Script Insertion防御側

では、このScript Insertion攻撃に対して防御をしてみます。
防御方法はサニタイズと呼ばれる方法。今回はHTML出力に対してなので、HTML出力サニタイズと表記です。
具体的にはPHPの htmlspecialchars()関数を使用します。
これは、タグなどの特殊文字をブラウザ出力用の<などに変換することで無害化する関数です。

コードは以下のようになります。

//echo '題名:'.$row['title'].'<br />' ;//↓へ替える
echo '題名:'.htmlspecialchars($row['title'],ENT_QUOTES).'<br />' ;//HTML出力サニタイズ

これで、Script Insertion攻撃は防がれました。

余談:
intval関数でリクエスト変数を変数に代入する際に明示的に型変換をしてスクリプトをはじく方法もあるそうです。