XSSが勘違いされてる理由がわかった気がする

最近、未だにXSSが勘違いされててびっくりしたことがあったんだけど、なんで勘違いされてるのかわかった気がする。
どういう勘違いかというと、

JavaScriptではじけばいいんじゃね?

というもの。


まずはありきたりな説明から。



みたいなフォームがあって、次の画面に確認画面があるような、ありきたりなWebアプリケーション*1があったとする。
攻撃者は、まずこのフォームに

<s>test</s>

などと入れてみる。
なにも対策を施していないと、確認画面ではtestのように、取り消し線が表示されることになる。


ここまではいいのだが、ここでこういう勘違いが起こる。

ならフォームに制限を付けてしまえばいいだけじゃん!

JavaScriptで入力をチェックして、不正なデータは変換するなり、取り除くなりすればいいだけじゃん!


で、本題。
なんでこんな勘違いが起こってしまうのか。
それは、攻撃対象となっているページが、確認画面ではなく入力画面に思えてしまうじゃないだろうか。
だから、入力画面に行く手前ではじいてXSS対策をとった気になってしまうんじゃないだろうか。


ということで、確認画面が攻撃対象になっていることさえ正しく理解できれば、こういう誤解は発生しないんじゃないかな。
今まで勘違いを引き起こしていたのは、説明の仕方が悪かったのかも。

*1:の一部分