XSSと、HTMLを作る、ということの関連
浅学なので不正確の極みなのでしょうけれど…HTMLを作成することの原初的かつ本源的な意味合いって、まず最初にテキストありき、からスタートすべきだと思っています。
ここにテキストがある。適切な形式でweb上でパブリックにしたい。そのためにはマークアップが必要だし便利だ。というわけ。
マークアップするに先立って、マークアップに必要な記号と元のテキストの文の符号とがぶつかってはまずいので、プレ処理として「一種のエスケープ」が必ず必要。HTMLの世界では文字参照というやりかたでテキストを前処理しておき、マークアップに備えるということですよね。
だから、いわゆる「適切な文字参照でXSSを防ぎましょう」というのは、本当のところオカシナ話なんですよね。XSS以前に適切な文字参照は必要なのであって。なんとならば、テキストそのままではマークアップできないからで。
HTMLについて以上のような勘所を知っていれば、XSSについてもかなり知っている、ということになると思います。
XSSと、HTMLを作る、ということの関連その2
ま、上で述べたことはちょっと知っている人は知っているわけで、いまさら素人の私が言うべきことでもないんです。でもね。ちょっと深く考えてみると…
最初にテキストありき。
で、そのテキストってどんな? EUC-JPだけで書かれているの?UTF-8としてまともなの?とか、暗黙の了解事項があるわけです。 ここを意識していないと、XSS防衛以前に、マークアップとして失敗なんですよね。 今日はそれが言いたかったんです。駄目なウェブアプリをまた見てしまったので…HTMLとしての基本がなってないからXSSホウルがあるという…
なお、ブラウザを過度に信用しないようにもしたいですね。規格できまっている以外の信号を出力しているときにはブラウザの実装しだいでどんな変なことでも起こりますから。ね?