PHPにおけるXSS対処法

今回はXSSの対処法の一つとしてhtmlspecialchars()関数を用いた対処法を紹介する。

XSSとは

このページを見ている時点である程度把握していると思うが、XSSとはCross Site Scriptingの略で、 ユーザーが入力したデータに対してエスケープの欠陥によって任意のスクリプトが実行されてしまうことである。

対処方法

今回はhtmlspecialchars()関数を用いて対処する。 ログインを行うサイトを例に説明する。

XSSの対処がなされていない例

<?php if ($logged_in): ?>
            <?php echo "こんにちは".$_POST["username"]."さん"?>
        <?php elseif (!empty($_POST["username"])):?>
            <?php echo $_POST["username"]."さんが見つかりませんでした。入力情報を確認してください"?>
        <?php endif;?>

この例において $_POST[“username”] の出力において任意のスクリプト文があると、そのスクリプト文が実行されてしまう。 そこでhtmlspecialchars()関数を用いる

htmlspecialchars()の基本的な使い方

htmlspecialchars(エスケープする文字列, エスケープの種類, 文字コード);

ここでエスケープの種類は比較的に強いとされている ENT_QUOTES を入力するといいだろう。 また、文字コードも UTF-8 で問題ない。 実際に先程の例にhtmlspecialchars()関数を付け足してみる。

XSSの対処がなされている例

<?php if ($logged_in): ?>                                                                                                      
          <?php echo "こんにちは".htmlspecialchars($_POST["username"])."さん"?>                                                      
      <?php elseif (!empty($_POST["username"])):?>
          <?php echo htmlspecialchars($_POST["username"])."さんが見つかりませんでした。入力情報を確認してください"?>
      <?php endif;?>   

これでXSSのの対処がなされた。