使用正则表达式、会话存储和身份验证令牌防止 CSRF 攻击?

信息安全 验证 csrf oauth
2021-09-04 18:15:41

用户使用他的用户名和密码登录到我的 Web API 服务。
Web API 服务响应身份验证令牌到客户端浏览器。

客户端浏览器使用 JavaScript 将身份验证令牌保存到会话存储。
客户端页面使用正则表达式来验证每个用户的输入。
客户端将 Ajax 请求附加身份验证令牌发送到 Web API 服务。

Web API 服务使用正则表达式来验证来自每个 Ajax 请求的数据。

通过使用这种方法,我还需要防伪令牌以隐藏在客户端页面中吗?

2个回答

是的,您仍然需要某种反 CSRF 实现,因为您仍然无法验证请求的来源。

为了让 CSRF 攻击更清楚一点,请看一下这张图:

CSRF攻击的过程

可以在此处找到使用 PHP 的反 CSRF 实现。

发起跨域请求时,浏览器不会自动发送浏览器会话存储。因此,当您手动添加身份验证令牌时,这本身就是 CSRF 防御,不需要任何进一步的保护。

我假设这里的网站和 Web API 之间存在一对一的关系。如果不是,则您的 API 的使用者可能正在向另一个使用者发出跨域请求。为了解决这个问题,您应该将用户会话与发出原始身份验证请求的网站的标识符联系起来,并检查每个进一步的请求以减轻 CSRF。