Php 如何像转义输出一样转义json以防止XSS

Php 如何像转义输出一样转义json以防止XSS,php,jquery,json,Php,Jquery,Json,当您转义输出时,可以这样做以防止XSS: echo htmlentities( $variable ); 我们是否也需要转义json对象来阻止XSS echo htmlentities( json_encode( $variable ) ); 或者没有必要,请有人告诉我。如果不需要,请解释原因 JQuery: 在ajax的成功部分中: 它将在$中。每个循环和内容将是: $('#textbox').attr( 'value', variable ); 否。J

当您转义输出时,可以这样做以防止XSS:

      echo htmlentities( $variable );
我们是否也需要转义json对象来阻止XSS

      echo htmlentities( json_encode( $variable ) );
或者没有必要,请有人告诉我。如果不需要,请解释原因

JQuery:

在ajax的成功部分中:


它将在$中。每个循环和内容将是:

    $('#textbox').attr( 'value', variable ); 

否。JSON编码的输出是安全的。所有可能有害的字符或输入类型都正确转义或引用


是的,这是输入类型文本(文本框html)的正确值属性

您需要通过
htmlspecialchars
运行它(您也可以使用
htmllentities
,但这太过分了)

HTML中具有特殊含义的字符(如
)可能出现在JSON文本中,并且将(如果没有转义)充当由匹配字符分隔的属性中的“属性值结尾”字符

<input value="{ "foo": 1 }">
                 ^^^^^^^^^^
                 this is an error

^^^^^^^^^^
这是一个错误

如何转义数据取决于您将数据放在何处,而不是转义的数据是什么。我们无法告诉您需要对数据执行什么操作,因为我们不知道您的
echo
语句出现在何处。JSON对象被解析为javascript/JQuery。用于显示输出,有时放在文本框中。”JSON对象被解析为JavaScript /jQuery“-这不说明您在哪里放置它。只是处理它。这可能意味着您编写了一个<代码>应用程序/JSON<代码/HTTP响应,或者将它嵌入到一个DIV上的<代码>数据JSON<代码>属性值,或者将其嵌入到<代码> < /代码>元素的中间。(如果您这样做,您可能会将其作为JSON的JS文本或JSON的JS字符串表示)。“有时放在文本框中”-什么是文本框?您是指
input
元素的value属性吗?您是指
textarea
元素的textNode子节点吗?是的,这是输入类型text的正确值属性(文本框html)。这可能是真的,也可能不是真的,这取决于JSON文本被回送到的位置。(例如,如果它被回送到html属性值中则不是真的),它将在$中。每个循环和内容将是:$('#textbox')。attr('value',变量);那么您就不会输出HTML,DOM将为您处理转义。也就是说,您应该使用
$('#textbox').val(变量)
,而不是摆弄
attr