javascript——为什么不应该';服务器是否使用JSON数组进行响应?
根据: 不要期望解码后的JSON直接成为heroes数组。此服务器始终将JSON结果包装为具有数据属性的对象。你必须打开它才能找到英雄。这是传统的web API行为,由 (“英雄”是一组对象)。javascript——为什么不应该';服务器是否使用JSON数组进行响应?,javascript,security,Javascript,Security,根据: 不要期望解码后的JSON直接成为heroes数组。此服务器始终将JSON结果包装为具有数据属性的对象。你必须打开它才能找到英雄。这是传统的web API行为,由 (“英雄”是一组对象)。 上述段落中的内容是: 始终返回外部带有对象的JSON 始终将外部原语作为JSON字符串的对象: 可利用的: [{“对象”:“数组内”}] 不可利用: {“对象”:“不在数组内”} 也不可利用: {“结果”:[{“对象”:“数组内”}]} 我的问题是:为什么服务器不应该返回类似JSON数组的东西? 说:
上述段落中的内容是: 始终返回外部带有对象的JSON
始终将外部原语作为JSON字符串的对象:
可利用的:
[{“对象”:“数组内”}]
不可利用:
{“对象”:“不在数组内”}
也不可利用:
{“结果”:[{“对象”:“数组内”}]}
我的问题是:为什么服务器不应该返回类似JSON数组的东西?
说:
[
“苹果”
“橙子”
“桃子”
]
这是一个怎样的安全问题?为了避免:
这是一个JSON数组这一事实很重要事实证明,包含JSON数组的脚本是有效的JavaScript脚本,因此可以执行。仅包含JSON对象的脚本不是有效的JavaScript文件。
例如,如果您有一个包含以下JSON的JavaScript文件:{“Id”:1,“Balance”:3.14}
,并且您有一个引用该文件的脚本标记:
您的HTML页面中会出现JavaScript错误。然而,由于一个不幸的巧合,如果您有一个脚本标记引用一个只包含JSON数组的文件,那么它将被认为是有效的JavaScript,数组将被执行
因此,允许JSON以对象以外的任何形式返回将使返回包含可在客户端级别运行的代码的JSON数组成为可能(在客户端不希望其可运行的上下文中,可能是恶意的,等等)。只有返回JSON对象才能防止这种情况发生。这是一个相当糟糕的建议,从angular教程中删除