有很多关于preventing CSRF的文章。
但我只是不明白:为什么我不能只解析目标页面表单中的csrf标记并使用我的伪造请求提交它?
答案 0 :(得分:1)
如果您能够将脚本代码注入目标页面(XSS),那么您可以这样做,从而使CSRF预防无效。
CSRF令牌必须存储在最终用户收到的页面中(或者他也不会知道)。
事实上,在安全评估中,XSS通常不会评估其自身的潜在损害,而是仅用于此类攻击。
答案 1 :(得分:1)
CSRF攻击是盲目的。他们进行会话骑行,攻击者无法直接控制,除非他可以通过XSS漏洞提取令牌。通常可以使用会话范围的令牌。每个请求旋转令牌可能是一种过度杀伤,可能导致错误警报。我更喜欢使用主会话令牌为每个资源使用令牌。
答案 2 :(得分:0)
因为事先不知道CSRF令牌的价值。
答案 3 :(得分:0)
每个用户和每个请求的CSRF令牌应该是一个完全不同的令牌,因此永远不会被攻击者猜到。
对于php,.net和javascript看看OWASP CSRFGuard Project - 如果你正在使用java和jsf 2.x它已经保存了CSRF(只要你使用POST而不是GET - 为此你将不得不等待JSF 2.2)否则,如果你没有JSF工作,OWASP ESAPI的HTTPUtillities Interface也会非常有用!