反射型XSS(Reflected XSS)の解説

1. 反射型XSSとは

反射型XSS(Reflected Cross-Site Scripting)は、攻撃者が作成した悪意のあるスクリプトが、ウェブアプリケーションを介してユーザーのブラウザに「反射」され、実行される攻撃です。

今回のサンプルページでは、URLパラメータ(例: ?keyword=)経由で渡された値が、サーバー側で適切に処理されずにHTMLとして出力される場合、攻撃が成立します。

2. 攻撃例

ユーザーが以下のようなURLをクリックするように誘導された場合を想定します。

http://localhost:8000/reflected-xss/reflected-xss-vulnerable.php?keyword=

脆弱なページ (reflected-xss-vulnerable.php) では、URLのkeywordパラメータに含まれるが、そのまま検索結果としてHTMLに挿入されます。これにより、ユーザーのブラウザでアラートが表示されたり、Cookie情報が盗まれたり、偽のコンテンツが表示されるなど、様々な被害が発生する可能性があります。

3. 対策方法

XSS攻撃の最も基本的な対策は、ユーザーからの入力値(URLパラメータ、フォーム入力など)を信頼せず、出力時に適切なサニタイズ(無害化)を行うことです。

PHPでは、htmlspecialchars()関数がよく利用されます。この関数は、HTMLの特殊文字をHTMLエンティティに変換します。

これにより、 のような悪意のあるスクリプトが、ブラウザにとっては単なる文字列として認識され、実行されることがなくなります。

htmlspecialchars() の使用例


        

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

4. まとめ

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