慎防国际化中的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("<", "&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;");

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值