蓄積型XSS(Stored XSS)の解説

1. 蓄積型XSSとは

蓄積型XSS(Stored Cross-Site Scripting)は、攻撃者が悪意のあるスクリプトをウェブアプリケーションのデータベースやファイルに投稿・保存し、それが他のユーザーに表示される際に実行される攻撃です。

今回のサンプルページでは、データベースの代わりにPHPのセッション変数に口コミを保存しています。訪問者が脆弱なページを閲覧すると、保存された悪意のあるスクリプトがブラウザ上で実行されてしまいます。

2. 攻撃例

以下のようなスクリプトを口コミとして投稿した場合を想定します。

<script>alert('XSS攻撃成功!');</script>

脆弱なページ (stored-xss-vulnerable.php) では、この入力がそのままHTMLとして解釈され、 のような悪意のあるスクリプトが、ブラウザにとっては単なる文字列として認識され、実行されることがなくなります。

htmlspecialchars() の使用例

<?php
$user_input = "<script>alert('XSS');</script>";
$safe_output = htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
echo $safe_output; // 結果: &lt;script&gt;alert('XSS');&lt;/script&gt;
?>

対策済みページ (stored-xss-safe.php) では、このhtmlspecialchars()関数を適用することで、XSS攻撃から保護しています。

4. まとめ

XSS対策は、ウェブアプリケーション開発における基本中の基本です。ユーザーからの入力値を画面に出力する際は、常にエスケープ処理を施す習慣をつけましょう。