Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript——为什么不应该';服务器是否使用JSON数组进行响应?_Javascript_Security - Fatal编程技术网

javascript——为什么不应该';服务器是否使用JSON数组进行响应?

javascript——为什么不应该';服务器是否使用JSON数组进行响应?,javascript,security,Javascript,Security,根据: 不要期望解码后的JSON直接成为heroes数组。此服务器始终将JSON结果包装为具有数据属性的对象。你必须打开它才能找到英雄。这是传统的web API行为,由 (“英雄”是一组对象)。 上述段落中的内容是: 始终返回外部带有对象的JSON 始终将外部原语作为JSON字符串的对象: 可利用的: [{“对象”:“数组内”}] 不可利用: {“对象”:“不在数组内”} 也不可利用: {“结果”:[{“对象”:“数组内”}]} 我的问题是:为什么服务器不应该返回类似JSON数组的东西? 说:

根据:

不要期望解码后的JSON直接成为heroes数组。此服务器始终将JSON结果包装为具有数据属性的对象。你必须打开它才能找到英雄。这是传统的web API行为,由

(“英雄”是一组对象)。
上述段落中的内容是:

始终返回外部带有对象的JSON
始终将外部原语作为JSON字符串的对象:
可利用的:
[{“对象”:“数组内”}]

不可利用:
{“对象”:“不在数组内”}

也不可利用:
{“结果”:[{“对象”:“数组内”}]}

我的问题是:为什么服务器不应该返回类似JSON数组的东西? 说:
[
“苹果”
“橙子”
“桃子”
]

这是一个怎样的安全问题?

为了避免:

这是一个JSON数组这一事实很重要事实证明,包含JSON数组的脚本是有效的JavaScript脚本,因此可以执行。仅包含JSON对象的脚本不是有效的JavaScript文件。

例如,如果您有一个包含以下JSON的JavaScript文件:
{“Id”:1,“Balance”:3.14}
,并且您有一个引用该文件的脚本标记:

您的HTML页面中会出现JavaScript错误。然而,由于一个不幸的巧合,如果您有一个脚本标记引用一个只包含JSON数组的文件,那么它将被认为是有效的JavaScript,数组将被执行


因此,允许JSON以对象以外的任何形式返回将使返回包含可在客户端级别运行的代码的JSON数组成为可能(在客户端不希望其可运行的上下文中,可能是恶意的,等等)。只有返回JSON对象才能防止这种情况发生。

这是一个相当糟糕的建议,从angular教程中删除

  • 链接的OWASP Cheet表列出了防止JSON劫持的三种方法。本教程选择的一个是最难正确实现的,因为我们必须教育每一个开发人员,审计每一个REST资源,而不是编写一个HttpInterceptor来扩展CSRF防御以获取请求
  • JSON劫持只能由于浏览器bug而发生,这些bug往往会很快被修复(这并不意味着这种攻击是不可能的,但简单的漏洞攻击在现代浏览器中不再有效)