Spring控制器设置:
window.location.href = 'some_url'
JSP有类似的东西:
model.addAttribute("myJsonObj", JsonUtils.toJson(myObject));
如何正确保护它免受任何XSS攻击?
会破坏JSON(双引号等)
在JSP中直接避免使用EL的正确策略是什么?
答案 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}');