在 CF(9.0.2 中esapi-2.0_rc10.jar
):
<cfset test = ['ha"ha"']>
<script>
x = JSON.parse('#encodeForJavaScript(serializeJSON(test))#');
y = JSON.parse('#replace(serializeJSON(test), '"', '\"', "all")#');
z = #serializeJSON(test)#;
j = JSON.parse('#jsStringFormat(serializeJSON(test))#');
</script>
输出:
<script>
x = JSON.parse('\x5B\x22ha\x22ha\x22\x22\x5D');
y = JSON.parse('[\"ha\\"ha\\"\"]');
z = ["ha\"ha\""];
j = JSON.parse('[\"ha\\\"ha\\\"\"]');
</script>
y
,z
并且j
有效。
x
实际上失败了:“Uncaught SyntaxError: Unexpected token h”
我认为encodeForJavaScript()
在 ESAPI 中应该是在这种情况下使用的最好和最安全的功能。为什么在这里失败?
附带问题,如果我只使用serializeJSON()
,即使数据是使用用户输入动态构建的,是否意味着我真的不需要使用JSON.parse
,因为 JSON 字符串中肯定没有函数?