- 曇り
1130
差し戻したものの完了報告が来てたので再確認
- ひとまず自分の検証可能な範囲では問題なくなってるのを確認
- 一部の古いブラウザでかなり面倒な手順で問題が出せなくはないけども,そのコストを負担するのもさせるのも目的ではないので放置
- 改修方法が,標準的な方法ではなくて,オレオレエンコーダを挟んでるようで,場合によってはページの機能がおかしくなるのだけども,それ自体はバグであって脆弱性ではないので放置
ユーザ入力をコンテキストに応じて適切にエスケープするのが人類には早すぎる的な状況なので,フレームワーク or テンプレートエンジンが基本すべて適切にエスケープして生の値をどうしても使いたいときは黒魔術的な方法しかありませんよってのが理想的なんじゃないかと思う.
あるいは,HTML + JS + CSS + etc. が完全に分離されて,コンテキストの判断が不要になれば,それぞれのリソース内ではそれぞれの言語に応じた変換だけで済むから,「 html 内に埋め込まれた document.write で書きだす onclick属性のスクリプト内の遷移先url のクエリ部分に使うには」みたいなのに悩む必要がなくなる.(ただ,この場合 encodeURIComponent 相当だけで済むが)
ただ,リソースを分離して js の文字列リテラルを全部 \u にしても,それが document.write や innerHTML に渡される場合,html として安全にしておいてから \u 化したり,渡す前にどうにかして意図しない要素や属性をうまないようにしたりと,実行時のコンテキストを超える箇所での対応が必要なのは変わらない.
2012/12/21 金