国際化におけるlangageパラメータXSS注入を慎む
最近使ったxwikiはまた安全センターにご愛顧されました.新しいxssホールをスキャンしました.xwikiは海外のオープンソースフォーラムですので、国際化処理をしたことがあり、多言語をサポートしています.
これらのコード列は、すべて動的に取得されます.コードは以下の通りです.
そして、邪悪が生まれた!
しかし、自分がダウンロードしたxwikiを使って注意しなければなりません.上記のようにダイナミックなコンテンツをキャプチャして、langguageは必ず注入されます.特に
//xwiki/templates/httml header.vm この共同ページ
現在の私の解決策は、xwikiから提供されたテンプレート関数replacceAllで特殊文字をフィルタリングすることです.
以下にもいろいろなフィルタ条件を並べて、便利な後期はマニュアルとして読みます.
htmlエレメントフィルタの文字セット
<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("<", "<").replaceAll(">", ">").replaceAll("/", " ")" />
以下にもいろいろなフィルタ条件を並べて、便利な後期はマニュアルとして読みます.
htmlエレメントフィルタの文字セット
ignoreHtmlElementsTable.put('<', "<");
ignoreHtmlElementsTable.put('>', ">");
ignoreHtmlElementsTable.put('\'', "'");
ignoreHtmlElementsTable.put('\"', """);
ignoreHtmlElementsTable.put('&', "&");
htmlプロパティフィルタ文字セットignoreHtmlAttributesTable.put('=', "=");
ignoreHtmlAttributesTable.put('`', "`");
xml元素、属性フィルタ文字セットignoreXmlElementsTable.put('\'', "'");