JSON

JSONObject输出json串可引发XSS

字号+ 作者:H5之家 来源:H5之家 2017-12-19 11:13 我要评论( )

测试用的是net.sf.json.JSONObject,大家也可以去试试其他JSONObject。JSONObject json = null;json = new JSONObject();json.put(

net.sf.json代码片段:

import net.sf.json.JSONObject;

public class Test {

public static void main(String[] args) {

JSONObject json = new JSONObject();

json.put(“key”, “{‘replace’:function(){alert(/xss/)}}”);

System.out.println(json);

System.out.println(((JSONObject)json.get(“key”)).get(“replace”));

}

}

org.json代码片段:

import org.json.JSONException;
import org.json.JSONObject;

public class Test {

public static void main(String[] args) throws JSONException {

JSONObject json = new JSONObject();

json.put(“key”, “{‘replace’:function(){alert(/xss/)}}”);

System.out.println(json);

System.out.println(((JSONObject)json.get(“key”)).get(“replace”));

}

}

使用net.sf.json输出结果是:

{"key":{"replace":function(){ alert(/xss/) }}}
function(){ alert(/xss/) }

[/code]

这里net.sf.json的value实际是一个JSONObject对象,所以还可以调用注入value中JSONObject对象,这是net.sf.json正常的嵌套功能,但是它不符合js json的标准

使用org.json输出结果是:

[code]

{"key":"{'replace':function(){alert(/xss/)}}"}
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to org.json.JSONObject
at Test.main(Test.java:20)

org.json是符合js json标准的,它的value就是个String,cast成JSONObject就报异常了.

其实就是个net.sf.json的json与js json输出标准不一样造成的,从而可以控制输出端的内容,通过构造在前端做某些js函数操作时,其内容会被当成js语句块执行,就是上面的xss了

那为什么不用org.json,要用net.sf.json了?因为net.sf.json更为强大(比如:多层嵌套(类似迭代器),javabean转换等)

(3)

举报

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • SpringBoot add XSS Encode for JSON Dto

    SpringBoot add XSS Encode for JSON Dto

    2017-11-18 11:00

网友点评