実行前
AntiXss.HtmlEncode:<%=AntiXss.HtmlEncode("azAZ09,-_ <>%'\"日本語") %>
Server.HtmlEncode:<%=Server.HtmlEncode("azAZ09,-_ <>%'\"日本語") %>
AntiXss.HtmlAttibuteEncode:<%=AntiXss.HtmlAttributeEncode("azAZ09,-_ <>%'\"日本語") %>
AntiXss.JavaScriptEncode:<%=AntiXss.JavaScriptEncode("azAZ09,-_ <>%'\"日本語") %>
AntiXss.UrlEncode:<%=AntiXss.UrlEncode("azAZ09,-_ <>%'\"日本語") %>
Server.UrlEncode:<%=Server.UrlEncode("azAZ09,-_ <>%'\"日本語") %>
AntiXss.VisualBasicScriptEncode:<%=AntiXss.VisualBasicScriptEncode("azAZ09,-_ <>%'\"日本語") %>
実行後
AntiXss.HtmlEncode:azAZ09,-_ <>%'"日本語
Server.HtmlEncode:azAZ09,-_ <>%'"日本語
AntiXss.HtmlAttibuteEncode:azAZ09,-_ <>%'"日本語
AntiXss.JavaScriptEncode:'azAZ09,-_ \x3c\x3e\x25\x27\x22\u65e5\u672c\u8a9e'
AntiXss.UrlEncode:azAZ09%2c-_%20%3c%3e%25%27%22%u65e5%u672c%u8a9e
Server.UrlEncode:azAZ09%2c-_+%3c%3e%25'%22%e6%97%a5%e6%9c%ac%e8%aa%9e
AntiXss.VisualBasicScriptEncode:"azAZ09,-_ "&chrw(60)&chrw(62)&chrw(37)&chrw(39)&chrw(34)&chrw(26085)&chrw(26412)&chrw(35486)
昨日のAntiXSSLibraryについて初音さんが食いついてきた(^^;ので、ちゃんと続報します。
でいきなり上が答えです。
AntiXSSのドキュメントにどの文字をエンコードするかHTMLでも一般的なテキストノードやなどにでてくる場合と、属性中にでてくる場合によってエンコードする文字が違うと言うことがかかれています。
ただエンコードの仕方がいきなり乱暴です
意味的に等価としても, lt, gt, amp, quotの4つは文字実体参照にすることが一般的には求められています。
サイズを小さくしたいがためというなら、quotについては許容できるかもしれません。
空白についてもnbspへの変換の方が望ましいでしょう。
ASCIIの範囲外の文字については興味がないようで、無条件に数値実体参照に変換しています。
一番使いたいJSとVBSについてはほぼHTMLエンコードと同じ乱暴っぷり
クォート種類への配慮だけでよいはず。またはそのまま出力されることを考慮するならHTMLエンコード範囲も考慮するべきかもしれませんが、日本語を使うと絶望できます。(とくにVBS)
URLエンコードはやや微妙
もともとURLエンコード自体非常に微妙で、QueryStringに渡す?と&と=と,は特殊な扱いで、それら以外の非ASCIIはエンコードするような仕様です。
なので本来URLのQueryStringにはキーと値にだけエンコードする。値を列挙する場合には区切り文字として,を挿入して、要素内の,はエンコードするなんて事をちまちま意識しなくてはいけません。
それよりもなによりも、UTF-16にエンコードするとは何事ですか・・・
おととい出直してきてください
開発チームのと直接コンタクトをとらせてもらえないかな。小一時間説教・・・・・・