我正在尝试从JSON-String中转义值,并在后端删除HTML字符(如“< script>”等)。我已经读过GSON normaly本身,但在我的情况下,并不是因为我通过“fromJson”直接填充javaobject。
如果我只是使用commons库并使用escapeString或escapeJson进行转义,它也会转义双引号(“),然后将从GSON中断出fromJson函数。
我正在使用以下功能来填充对象:
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").create();
DataObject dObject = gson.fromJson(jsonString, DataObject.class);
json字符串如下所示(是动态的):
{"dynamic":[
{"id":1,"constrain":"1","value_text":"test"},
{"id":11,"constrain":"1","value_boolean":1},
],"name":"Xzzz",
"prename":"XY",
"language":"e",
"email":"x@xy.com"
}
我只是想要转义json字符串的值(就像有人输入名称“< script>”那样它应该被转义为& lt; script& gt;)
有谁知道如何解决这个问题?
提前致谢
答案 0 :(得分:2)
我的猜测是,您正在尝试清理用户的输入以防止跨站点脚本。 您可能想要做的是使用白名单进行输入。输入通过后,您可以将其发送到后端。
这是一个很好的参考
http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer
总结归结为:
String unsafe =
"<p><a href='http://example.com/' onclick='stealCookies()'>Link</a></p>";
String safe = Jsoup.clean(unsafe, Whitelist.basic());
// now: <p><a href="http://example.com/" rel="nofollow">Link</a></p>
答案 1 :(得分:1)
如果Json的内容是正确的json你不应该担心html编码。任何json库都不会对属性进行自动html编码。 如果你需要编码为html,你可以使用这个lib:http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encoder.html#encodeForHTML(java.lang.String)
如果你想编码一个html属性赋值(也可能是一个场景),你应该使用它: http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encoder.html#encodeForHTMLAttribute(java.lang.String)
我的建议是,在完成任何此编码后,如果您的图书馆没有提供,请申请:http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encoder.html#encodeForJavaScript(java.lang.String)。
通常,在编码时,您必须知道浏览器中的解析器(Javascript / json / html)是如何运行的以及以何种顺序运行。