[ PHP ] クロスサイトスクリプティング ( XSS ) に関するメモ

クロスサイトスクリプティング ( 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 を使いました。

参考リンク

コメントを残す

メールアドレスが公開されることはありません。