Hello there, ('ω')ノ
🧪 どのように発生するのか?
たとえば、あるWebサイトがブログにコメント機能を提供しているとします。ユーザーがコメントを投稿すると、以下のようなHTTPリクエストが送られます:
POST /post/comment HTTP/1.1 Host: vulnerable-website.com Content-Length: 100 postId=3&comment=This+post+was+extremely+helpful.&name=Carlos+Montoya&email=carlos%40normal-user.net
この内容は、後に次のようにHTMLとして他のユーザーに表示されます:
<p>This post was extremely helpful.</p>
😈 攻撃者が悪意あるスクリプトを投稿すると…
攻撃者が以下のようなコメントを投稿したとします:
<script>alert('XSS');</script>
この入力はURLエンコードされ、サーバーに送信されます:
comment=%3Cscript%3Ealert('XSS')%3C%2Fscript%3E
🧨 攻撃の結果
サーバーがこの入力を無害化せずにそのまま保存し、コメントを表示したときにこうなります:
<p><script>alert('XSS');</script></p>
これにより、そのページを見た他のユーザーのブラウザ上でJavaScriptが実行されることになります。スクリプトはそのユーザーのセッションの文脈で動作するため、クッキーの取得、操作の乗っ取り、フィッシングなど様々な攻撃が可能になります。
✅ ストアドXSSの見つけ方のポイント
- コメント欄、チャット、プロフィールなど「入力が保存される」機能に注目。
<script>alert(1)</script>
や<img src=x onerror=alert(1)>
のようなテスト用のスクリプトを投稿。- 自分または他人のアカウントで該当ページを開いて動作を確認。
🛡 防止方法
- ユーザー入力を保存する前にHTMLエスケープ処理(サニタイズ)を行う。
- 表示時にもコンテンツのエスケープ処理を徹底する。
- コンテンツセキュリティポリシー(CSP)を導入してスクリプトの制限をかける。
Best regards, (^^ゞ