如何防止CSRF攻击?

How to prevent CSRF attacks?

我想防止 CSRF 攻击我的 API (Express app nodejs) 我搜索了 google 和 youtube,但找不到方法。在 youtube 教程中,它说生成一个令牌并将其发送到客户端,但黑客不会只发送一个获取 csrf 令牌的请求并绕过 csrf 东西吗?我很困惑,请帮忙。

传统 CSRF 攻击的工作原理是在攻击者的站点上放置一个 pre-populated 表单并提交它 cross-origin。然后,它会使用随请求自动发送的凭据,伪装成浏览器所有者的身份来发送攻击者的数据。

通过在 cookie(或 session)和表单中放置一个标记并检查它们是否匹配,您可以防御这种情况。攻击者不能只发送请求来获取 CSRF 令牌,因为:

  • 如果他们让用户发出请求,则同源策略会阻止他们读取其中包含令牌的响应
  • 如果他们直接发出请求,那么他们将不会获得用户的 cookie,因此会得到一个不同的 (non-matching) 令牌

当您处理 Web 服务(并且您需要使 API 跨源工作)时,情况就不同了。这里的关键防御是设计 API 所以:

  • 凭据被放置在不会自动发送的地方(例如在授权 header 中),因此攻击者无法使用它们发出请求。
  • 请求的格式要求发送 CORS 预检请求(例如 Content-Type: application/json 请求 header)。

…或两者兼而有之。