クロスサイトスクリプティング ( XSS ) の簡単な実例をメモ。
PHP は勉強中なので、この記事には間違いがあるかもしれません。 ご了承ください。
## 入力された値を、そのまま出力する問題のある PHP コード
入力用ページのソース ( index.html )
<form action="out.php" method="post">
<input type="text" name="name">
<input type="submit">
</form>
出力用ページのソース ( out.php )
<?php
echo ( $_POST [ 'name' ] );
?>
## クロスサイトスクリプティングの再現
例えば、上記フォームの入力欄に、
<script>alert(location.href);</script>
などと入力して送信すると、出力用のページでスクリプトが実行できてしまい問題があります。
<s>test</s>
とかでも再現可能。
## クロスサイトスクリプティング対策を行ったソース ( out.php )
対策は、HTML を出力する時に問題のある文字 ( < > ” & ) をエスケープし、<script>
タグを無効化 ( サニタイジングと言うらしい ) します。
<?php
echo ( htmlspecialchars ( $_POST [ 'name' ], ENT_QUOTES ) );
?>
特殊文字の変換処理には、htmlspecialchars を使いました。
## 参考リンク