Shikata Ga Nai

Private? There is no such things.

ストアド型クロスサイトスクリプティング(Stored XSS)とは?

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の見つけ方のポイント

  1. コメント欄、チャット、プロフィールなど「入力が保存される」機能に注目。
  2. <script>alert(1)</script><img src=x onerror=alert(1)> のようなテスト用のスクリプトを投稿。
  3. 自分または他人のアカウントで該当ページを開いて動作を確認

🛡 防止方法

  • ユーザー入力を保存する前にHTMLエスケープ処理(サニタイズ)を行う。
  • 表示時にもコンテンツのエスケープ処理を徹底する。
  • コンテンツセキュリティポリシー(CSP)を導入してスクリプトの制限をかける。

Best regards, (^^ゞ