在JSP中转义表示JSON数据的EL

时间:2016-02-27 01:16:00

标签: json jsp escaping xss

Spring控制器设置:

window.location.href = 'some_url'

JSP有类似的东西:

model.addAttribute("myJsonObj", JsonUtils.toJson(myObject));

如何正确保护它免受任何XSS攻击?

会破坏JSON(双引号等)

在JSP中直接避免使用EL的正确策略是什么?

1 个答案:

答案 0 :(得分:1)

当JSP输出var myObj = ${myJsonObj};时,行为与脚本的 eval 相同并导致XSS问题。 解决方案是以字符串形式输出${myJsonObj},因此不会执行恶意脚本。 然后使用JSON.parse()将字符串恢复为javascript对象,这样您就不必更改其他脚本。

输出${myJsonObj}作为字符串时,必须处理双/单引号char。 这可以使用JSP自定义标记/ EL函数来完成,例如:

var myObj = JSON.parse('<my:escapeEcmaScript value="${myJsonObj}"/>');

或者在Spring控制器中执行

model.addAttribute("myJsonObj", StringEscapeUtils.escapeEcmaScript(JsonUtils.toJson(myObject)));
//In JSP
//var myObj = JSON.parse('${myJsonObj}');