Web開発を学び始めた人
Django、Flask、PHP、Java、Node.jsなどを使う開発者
JavaScript、TypeScript、React、Vue、Angularを使う開発者
WebSocketやSPAを実装している人
CMS、チャット、管理画面、SOC画面を運用している人
脆弱性診断やセキュリティレビューを担当する人
コード例は、主にHTML、JavaScript、Djangoを使用します。
攻撃用の外部送信コードやCookie窃取コードは掲載しません。安全な確認用文字列を使って説明します。
XSSとは、信頼できないデータが、ブラウザーによってHTMLやJavaScriptなどの実行可能な内容として解釈される脆弱性です。
たとえると、受付へ渡したメモの内容を表示するだけのはずが、メモに書かれた「管理画面を開く」という命令まで実行してしまう状態です。
正式には、次の流れで発生します。
信頼できない入力
↓
Sourceから取得
↓
文字列の連結・変換・保存
↓
危険なSinkへ渡される
↓
HTML・JavaScript・URLなどとして解析
↓
被害者のブラウザーで実行
MITREでは、XSSをCWE-79「Webページ生成時における入力の不適切な無害化」として整理しています。
Sourceは、信頼できないデータの入口です。