您至少必须检查Content-Type: application/json
请求。
不可能通过 POST<form>
提交请求Content-Type: application/json
。但是您可以将正文中具有有效 JSON 结构的表单提交为enctype="text/plain"
.
不可能针对非跨域感知服务器执行跨域 ( CORS ) XMLHttpRequest POST,因为这将导致“预飞行”HTTP OPTIONS 请求首先批准它。Content-Type: application/json
但是你可以发送一个跨域 XMLHttpRequest POST withCredentials如果它是text/plain
.
所以即使有application/json
检查,你也可以非常接近 XSRF,如果不是完全在那里的话。而且你用来确保安全的行为有些模糊,并且仍处于工作草案阶段;它们不是网络未来的硬性保证。
这些可能会中断,例如,如果enctype
在未来的 HTML 版本中将新的 JSON 添加到表单中。(WHATWG 将text/plain
enctype 添加到 HTML5 并且最初也尝试添加text/xml
,因此这不是不可能发生的。)您增加了 CORS 实现中更小、更微妙的浏览器和插件错误的危害风险。
因此,虽然您现在可能可以侥幸成功,但如果没有适当的反 XSRF 令牌系统,我绝对不建议您继续前进。