捌く超高速CMS「adiary」2006/09/12(火)adiaryのXSS対策adiary::仕様Version1.00β9以降についての記述です。"はすべてエスケープ。DNS逆引きホスト名内のタグ文字などをエスケープ。PATH_INFOなどの文字列は、エスケープなしに(表示等に)使用しない。「{」を「&#123;」に置き換える。日記内や日記の紹介、RSSなどで使用可能なタグと属性値をホワイトリスト式とする。action属性では、登録されたプロトコル以外で始まるリンクを消去*1。相対パスの場合は"./"を付加。タグの最後の属性値が0x80以上の文字で終わる場合、スペースを付加するかさらに後ろにダミーの属性値xss=""を追加する(EBXSS対策)。LF以外の制御文字を除去する。"~"といった文字列(改行を含む)を退避し、文字列内から改行を除去*3、さらに日本語文字で終わる場合はスペースを付加する。#を除く文字の、手前に付く\記号を除去する。0x80~0xffのコード(全角文字など)をすべて消去する。includeといった文字列が完全になくなるまで除去する。間に挟んだ上記の記号列が1つでも存在する場合、TABやLFの手前にスペースを1つ追加する。正しいかチェックする。相対リンクの場合は"./"を先頭に付加する。