0

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>

yzおよびjは有効です。

x実際に失敗します: "Uncaught SyntaxError:Unexpected token h"

encodeForJavaScript()ESAPIでは、このような状況で使用するのに最適で安全な関数であると考えました。なぜここで失敗するのですか?

副次的な質問ですがserializeJSON()、データがユーザー入力で動的に構築されている場合でもJSON.parse、JSON文字列に関数がないため、実際に使用する必要がないということですか?

4

2 に答える 2

2

JSON文字列で使用する場合encodeForJavascript、それは有効なJSONではなくなります。

于 2012-07-20T19:00:37.533 に答える
0

JSON.orgからの引用:

数値は、8進数と16進数の形式が使用されないことを除いて、CまたはJavaの数値と非常によく似ています。

これはJSONコンテキストにあります

この写真は、jsonオブジェクトの文字列の形式を示しています。

詳細については、json.orgを参照してください

于 2012-07-20T18:35:22.360 に答える