AJAX 请求的反 CSRF 令牌的替代方案(同源策略)

信息安全 csrf 阿贾克斯 同源策略
2021-08-19 22:09:38

我正在开发一个完全基于 AJAX(通过 jQuery)的 PHP 网站。它是一个页面,其中所有请求都由 AJAX 发出。

与针对 CSRF 的保护相关,我遇到了必须在我发出的每个请求中手动包含令牌的问题,这非常乏味和不舒服。在寻找令牌的替代解决方案时,我阅读了与 AJAX 请求相关的 SOP(同源策略)。如果我理解得很好,xmlhttprequest 是不允许跨不同域的(除非这启用了 CORS,但情况并非如此)。

因此,在这种情况下,我想知道检查请求的来源(通过 HTTP_ORIGIN)和标头 X-Requested-With(以确保请求是 AJAX 请求)是否足以防止 CSRF 攻击。即,我想知道考虑到上述条件是否真的需要任何令牌。

非常感谢您的宝贵时间。

1个回答

是的,您可以使用自定义标头来X-Requested-With保护来自 CSRF 的 AJAX 请求。

如果您的服务器上未启用 CORS,则不允许跨域客户标头。Origin也可以使用标头,但是这样做的逻辑并不简单

如果您想本着纵深防御的精神为自定义标头添加额外的安全性,您可以在标头中添加一个标记但是,正如您所说的那样,这是您想要避免的乏味,检查自定义标头就足以阻止浏览器插件(如 Flash 或 Silverlight)中任何未来允许设置此标头的漏洞。