通过GET请求防止CSRF攻击?

use*_*418 7 html security authentication http csrf

我在我的网络服务器上建立了一个无状态的,基于JWT的用户认证系统,遵循Stormpath的例子(https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-网络存储).

该设置似乎对CSRF非常安全,但我想知道GET请求是什么.

我能够通过<img>在来自不同域的页面上包含标记来模拟对GET请求的CSRF攻击.服务器以200状态的整页响应请求.虽然我没有更改GET请求的任何数据,但页面可能仍然包含一些敏感信息,例如, <img src="https://example.com/account" />可能会给出用户的详细信息,或者<img src="https://example.com/logout" />可能只是做一些烦人的事情,我想可以有更多的例子.

这种<img>攻击被认为是无害的,因为浏览器不会透露它获得的回复吗?是否有任何其他滥用HTML标签的技巧,可能会通过向GET请求显示服务器输出来泄露敏感信息?

我想在JET URL中另外包含我的JWT访问令牌的哈希,并让服务器要求GET请求包含该哈希,并且它必须与cookie中的JWT令牌匹配.通过这种方式,攻击者将无法猜测有效的GET URL,同时泄漏此类GET URL也不允许攻击者访问我的服务器,因为他不知道来自cookie的原始JWT.除了轻微的可用性问题,这个设置看起来对我来说是一个好主意,但我没有用Google搜索任何类似的东西,所以我很怀疑:)

Neh*_*pra 11

?CSRF 攻击的概念,它迫使经过身份验证的用户对他有权访问的 Web 应用程序执行不需要的操作。 

CSRF 攻击确保为无状态服务器引入状态更改,不涉及窃取数据,因为 GET 请求会将响应获取到受害者而不是攻击者,因为受害者已获得授权。攻击者无法看到对伪造请求的响应。 

CSRF 攻击可以改变服务器的状态,但它看不到他们的结果,它被迫盲目行动。 

假设 CSRF 攻击可以告诉受害者浏览器请求受害者银行帐户余额,但攻击者看不到该余额。这显然是毫无意义的攻击。

但是,如果攻击者要求受害者浏览器将资金从受害者帐户转移到攻击者的帐户,这并非毫无意义。攻击脚本无法访问传输的成功或失败页面。攻击者不关心成功或失败的反应?,他主要关心的是他想要账户里的钱。

如果您正在执行 GET 请求来更改服务器的状态,那么这对您来说可能是有风险的。

“GET http://bank.com/transfer.do?acct=BOB&amount=100 HTTP/1.1”,如果您有这样的要求。 

我相信它不会。

所以你必须专注于应该使用 CSRF 令牌监控的 POST 请求。 

分享 OWASP 规则的链接 https://www.owasp.org/index.php/Top_10_2010-A5-Cross-Site_Request_Forgery_%28CSRF%29 必须去一次。

  • 看来这个答案是从 https://security.stackexchange.com/a/115810 复制和编辑的。然而,这个答案更加清晰、简洁和易于理解。 (2认同)