-1

在最强大的 CSRF 保护之间,还有表单令牌保护。我对这种方法的问题是关于可用性:如果用户打开多个包含表单的页面,使用令牌,会生成多个令牌,但只有最后打开的页面可以成功发送表单,所有其他页面都会出错.

我想了2个解决方案:

  1. 在整个会话期间保留唯一令牌。
  2. 将所有生成的令牌存储在会话中。

但:

  1. 这是更现实的解决方案,但不太安全。
  2. 这会产生很大的资源开销,因为用户可以打开许多页面,而我必须存储所有生成的令牌。

因此,您是如何解决这个问题的?

PS 我正在开发的网站实际上是 PHP 中的电子商务,虽然汇款将通过外部提供商(如贝宝)进行管理,但我认为正确地为我的服务提供了良好的安全性。

4

1 回答 1

2

您不需要在数据库中存储令牌。

相反,您应该在 cookie 中包含相同的标记;跨站点攻击者无法读取或设置 cookie。
只要您在 cookie 中获得与 POSTed 表单相同的令牌,您就安全了。

为了提高安全性,您可以使用带密钥的 HMAC 散列对它们进行散列,并验证该散列以确保令牌来自您的服务器。
您还可以为每个用户制作令牌。

于 2012-08-24T13:32:41.973 回答