CF(9.0.2 with 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文字列に関数がないため、実際に使用する必要がないということですか?