XSS (クロスサイトスクリプティング)とは Web サイトの代表的な脆弱性。有名なだけあって実際 XSS の脆弱性があるだけでマジでやばいが、その割に対策は意外と簡単じゃなかったりする。
脆弱性自体のヤバさは他の記事に説明してもらう事にして、エスケープだけでは防げないケースが面白かったのでまとめてみる。最後に簡易的なテスト方法も紹介する。
エスケープ(サニタイジング)による基本的な対策
XSS を防ぐ根本的対策として良く挙げられるのは攻撃に使われる HTML の特殊文字をサーバーサイドでレンダリングする際にエスケープして「ただの文字」にしてしまうこと。
& < > " ' → escape → & < > " '
基本的にはこれによって多くのケースを防ぐことはできるが、防げないものもある。
以降は jinja みたいなテンプレートエンジンを使用して HTML を生成する際に、{{ data }} と書くと data に入っている値が(自動的に)エスケープされて埋め込まれると思って読んでほしい。
Template Designer Documentation — Jinja Documentation (3.1.x)