サニタイズって(略) [戯言]
『ockeghem(徳丸浩)の日記 - XSS対策:どの文字をエスケープするべきなのか』を読んで。
あ~、言われてみれば、確かに「>」「"」をエスケープする必要って無いな。
………。
………。
………。
と書くと、上の一文だけを読んで、『「>」と「"」は、「>」と「"」に変換してはいけない』と解釈する人がいるからなぁ、困ったことに。
蛇足ながら補足しておくと、HTMLを解釈するプログラムやHTMLの書き方を工夫することで、「>」「"」はエスケープしなくても正しく解釈できるということです。
個人的には、「<」はエスケープが必要で「>」は不要なんて非対称なことは、物事を複雑にするだけなので好きじゃないのです。
さて、余計な文字をエスケープした為に、正常に動かなかった事例を1つ。
某システムでのこと。
属性値(「<input type="text" value="○○○">」の「○○○」部分)用エスケープ関数では、次の文字を変換していました。
「"」「'」「<」「>」「 」(空白) ↓ 「"」「'」「<」「>」「 」
『「&」を変換していない』という致命的な問題は、この際、脇に置いておいて。
この場合の余計な文字は「 」(空白) → 「 」なわけで、こいつの所為で、IEではちゃんと動いてくれませんでした。
詳しくは言えないけど。
っていうか、どうして今まで発覚しなかったのか。
(なんで発覚しなかったかというと、「IEは動作対象外」という今時ありえない仕様だったから)
それは兎も角。
『HTMLでの属性値、すなわち"~"で囲まれている箇所は、「"」→「"」の変換をする』
という説明を見た某氏は、
Javascriptの文字列("~"で囲まれている)にも、「"」→「"」の変換をしてくださりました。がっでむ。
今日の一冊 | |
|
コメント 0