鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 网站安全 > 安全设置 > >

JSONObject输出json串可引发XSS

来源:互联网 作者:佚名 时间:2015-10-19 08:41
JSONObject json = null; json = new JSONObject(); json.put(code, 200); json.put(info, tester); json.put(msg, success); System.out.println(json); // 输出:{code:200,info:tester,msg:success} 在这里info是一个String,所以,很多前端工程师可能会
JSONObject json = null;
json = new JSONObject();
json.put("code", 200);
json.put("info", "tester");
json.put("msg", "success");
System.out.println(json);
// 输出:{"code":200,"info":"tester","msg":"success"}
在这里info是一个String,所以,很多前端工程师可能会选择使用Stirng.replace方法转义or过滤特殊字符。
如果在info中注入{‘replace’:function(){alert(/xss/)}}呢?
json = new JSONObject();
json.put("code", 200);
json.put("info", "{'replace':function(){alert(/xss/)}}");
json.put("msg", "success");
System.out.println(json);
// 输出:{"code":200,"info":{"replace":function(){ alert(/xss/) }},"msg":"success"}
JSONObject在输出json串时,info会作为对象输出,并且其中嵌入replace方法,js在使用replace方法转义过滤时,也就调用了嵌入的replace方法。
 
可以根据不同的场景把info构造成不同的对象,也可以构造成数组[function(){alert(/xss/)}] 或者 简单的函数 function(){alert(/xss/)}
NOTE:这种方式在jQuery中行不通,jQuery会对json串的格式做检查,一般的ajax,还有jsonp可能会存在这种xss问题。
 
网友评论
<