我继承了一些最近遭到攻击的代码,攻击者发送了重复的远程表单提交。
我使用会话身份验证令牌为每个用户(而不是会话ID)创建了。虽然我意识到这个特定的攻击不是CSRF,但我从这些帖子中调整了我的解决方案(尽管已过时)。
然而,它仍然觉得这里存在一些漏洞。虽然我知道没有什么是100%安全的,但我有一些问题:
最后,我正在寻求更好的理解,以便我可以实施更强大的解决方案。
答案 0 :(得分:9)
据我所知,您需要做三件事:让所有人改变数据操作只能使用POST请求,不允许POST请求没有有效的referrer(它必须来自同一个域)并检查每个中的auth令牌POST请求(POST令牌值必须与cookie中的令牌相同)。
前两个将使得很难做出任何有害的CSRF请求,因为它们通常是电子邮件,其他网站等中的隐藏图像,并且使用有效的引用者进行跨域POST请求应该是不可能/现代难以做到的浏览器。如果没有窃取用户的cookie /嗅探他的流量,这样就完全不可能做任何有害行为。
现在关于你的问题:
以及更多,但在一天结束时,一些现代机器人使用真实用户行为的总体模拟(使用真正的浏览器API调用) - 所以如果任何人真的想要攻击你的网站,没有防御这样会对你有所帮助。即使CAPTCHA今天也不是很可靠 - 除了复杂的图像识别算法,你现在可以购买1000个CAPTCHA,由人类为任何网站解决,价格低至1美元(你可以在发展中国家找到这样的服务)。所以真的,没有100%防御机器人 - 每种情况都不同:有时你必须自己创建复杂的防御系统,有时只需要一点点调整就会有所帮助。