慎防国际化中的language参数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使用就要注意了,上面提到的动态取context.language则一定会被注入到很惨!特别是
/xwiki/templates/htmlheader.vm 这个公用的页头。
目前我的解决方案是,用xwiki提供的模板函数replaceAll来过滤特殊字符。<>/
<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('\'', "'");
相关推荐
sswqycbailong 2020-07-28
csxiaoqiang 2020-07-26
码农成长记 2020-07-19
layloge 2020-07-05
layloge 2020-06-26
liangjielaoshi 2020-06-25
csxiaoqiang 2020-06-16
某先生 2020-06-13
ItBJLan 2020-06-11
layloge 2020-06-07
csxiaoqiang 2020-06-03
sswqycbailong 2020-06-01
layloge 2020-05-30
码农成长记 2020-05-28
qidu 2020-05-26
zhuangnet 2020-05-20
zhuangnet 2020-05-19
xiaoemo0 2020-05-16
码农成长记 2020-05-10