国際化におけるlangageパラメータXSS注入を慎む


最近使ったxwikiはまた安全センターにご愛顧されました.新しいxssホールをスキャンしました.xwikiは海外のオープンソースフォーラムですので、国際化処理をしたことがあり、多言語をサポートしています.
 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta name="gwt:property" content="locale=en" />
 
これらのコード列は、すべて動的に取得されます.コードは以下の通りです.
<meta name="gwt:property" content="locale=$!{context.language}"
 
そして、邪悪が生まれた!
?language="></script><script>alert()</script>&viewer=changes
 このコードを注入してhttp://platform.xwiki.org/xwiki/bin/view/DevGuide/DataModel?language="</script><script>alert()</scriptに行ってみましたが、このサイトは処理していますので、攻撃は成功しません.
 
しかし、自分がダウンロードしたxwikiを使って注意しなければなりません.上記のようにダイナミックなコンテンツをキャプチャして、langguageは必ず注入されます.特に
//xwiki/templates/httml header.vm   この共同ページ
 
現在の私の解決策は、xwikiから提供されたテンプレート関数replacceAllで特殊文字をフィルタリングすることです.
<meta name="gwt:property" content="$!context.language.replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("/", " ")" />
 
 
以下にもいろいろなフィルタ条件を並べて、便利な後期はマニュアルとして読みます.
htmlエレメントフィルタの文字セット
ignoreHtmlElementsTable.put('<', "&lt;");
ignoreHtmlElementsTable.put('>', "&gt;");
ignoreHtmlElementsTable.put('\'', "&#39;");
ignoreHtmlElementsTable.put('\"', "&quot;");
ignoreHtmlElementsTable.put('&', "&amp;");
 htmlプロパティフィルタ文字セット
ignoreHtmlAttributesTable.put('=', "&#61;");
ignoreHtmlAttributesTable.put('`', "&#96;");
 xml元素、属性フィルタ文字セット
ignoreXmlElementsTable.put('\'', "&apos;");