指定 JSON Content-Type 字符集的好处?

信息安全 http 编码 json
2021-08-22 03:39:24

根据OWASP 应用程序安全验证标准

V11.3 验证每个HTTP 响应是否包含指定安全字符集(例如UTF-8)的内容类型标头。

根据应用程序/json 媒体类型的 RFC

JSON 文本应以 Unicode 编码。默认编码为 UTF-8。

由于 JSON 文本的前两个字符始终是 ASCII 字符 [RFC0020],因此可以确定八位字节流是 UTF-8、UTF-16(BE 或 LE)还是 UTF-32(BE 或 LE)通过查看前四个八位字节中的空值模式。

如果您的编码实际上是 UTF-8,这意味着将Content-Type标头设置为application/json; charset=utf-8而不是仅application/json.

对 OWASP 规则进行例外处理是否合理application/json

1个回答

您最大的风险将是尝试将编码自动检测为 UTF-7 的旧版本的 Internet Explorer - 称为Codepage Sniffing

似乎 Internet Explorer 只会对网页执行此操作,而不会对 AJAX 请求执行此操作。因此 JSON 请求应该是安全的。此外,JSON 请求不会导致将内容直接呈现到页面 - 它们需要 JavaScript 处理才能操作 DOM,因此只有在您检索应该是预 HTML 编码的数据时才需要关注这一点。因此,如果 JSON 数据在客户端是 HTML 编码的,则页面的编码应该优先,不会导致+ADw-字符序列转换为尖括号,而这正是 UTF-7 的风险所在。

所以我想说指定charset=utf-8只对Content-Type: text/html页面是必要的。