1

在我的网站上,我用随机值放入了一个隐藏字段,同时我也将该值存储在 Session 中。提交表单时,我确保提交的值与会话值匹配。

这足以保护 CSRF 吗?任何入侵网站以强迫用户在不知不觉中向我的网站发布内容的人都不知道我生成的 CSRF 令牌是什么,因此他们的攻击将会失败。获取该令牌的唯一方法是向服务器发出 GET 请求,然后提取 cookie 并将其发布。

那可能吗?或者换句话说,您是否必须包含 cookie 作为针对 CSRF 的保护的一部分?我在这里没有看到它提到:https ://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet#Disclosure_of_Token_in_URL

除了“双重提交cookies”部分。

4

2 回答 2

2

是的,这对于 CSRF 保护来说已经足够了。为了获得最大程度的保护,请确保每次发出请求时都会更改隐藏的随机值(CSRF 令牌)。

通常推荐使用 Cookie,因为它们易于使用,并且大多数 Web 框架都有内置的便捷方式来使用它们。

于 2013-07-02T19:34:59.513 回答
0

一般来说,这是一个很好的方法。

您需要检查与会话固定预防的交互。当用户登录(或通过其他方式更改其会话的权限级别,例如更改用户、新帐户或通过密码重置隐式登录)时,您应该丢弃旧的会话存储的反 CSRF 令牌和生成一个新的。

这样一来,如果攻击者设法对您的应用程序进行会话固定攻击,他们将无法使用它来让您进入会话,等待您登录,然后对您进行 CSRF。当然,您应该确保会话固定不会发生,但这是一种有用的深度防御措施。(特别是一些潜在的会话固定路由,例如来自易受攻击的邻居域的 cookie 注入,可能超出您作为开发人员的控制范围。)

这通常很容易做到,因为在权限级别更改时,您应该已经使会话标识符无效并重新发布,以阻止会话固定攻击获得对帐户的完全访问权限。当您忙于这样做时,也要更改 CSRF 令牌。

(然而,没有必要为每个请求重新生成 CSRF 令牌,正如一些指南所建议的那样 - 这将使您的应用程序在导航和多选项卡使用方面变得脆弱。)

于 2013-07-03T13:21:06.743 回答