我不确定这是否有必要,但我在登录表单中看不到任何csrf令牌。通常在创建表单时,最后添加form_rest(form)
,然后添加csrf标记。但登录表单的处理方式不同,它不是一个真正的表单对象,它是一种自动化的。您可以在docs。
那是怎么回事?为什么登录表单没有csrf保护?我知道CSRF攻击是针对经过身份验证的用户,但Sf2中的匿名用户在技术上经过身份验证(请参阅会话cookie),而且我可能希望有一些渐进式的参与,例如在stackoverflow中,您可以执行某些操作而不是确认会员。
有什么想法吗?
答案 0 :(得分:3)
登录表单上
CSRF定义:攻击者可以强制受害者向服务器发送HTTP请求。
典型的学校书籍示例:启动汇款。 攻击者可以强制执行以下请求:http://bank.example.com/withdraw?account=Alice&amount=1000000&for=Eve
如您所见,攻击者必须事先烧掉网址。
如果是登录请求,则没有意义,因为攻击者必须烘焙这样的网址:http://example.com/login?user=pierre.ernst&pwd=secret。
如果攻击者已经拥有此信息(凭据),他很可能不会尝试CSRF: - )
希望它有所帮助。
答案 1 :(得分:0)
实际上,form_rest(form)
除了输入CSRF令牌之外还有很多功能,此函数会打印出尚未呈现的任何表单行,并且最好放入以确保已经存在的任何其他字段肯定会被忽视。
您没有看到CSRF令牌的原因是因为FOSUserBundle登录表单不是Symfony表单,它只是一个常规HTML表单,然后由FOSUser表单处理程序处理。
我不完全确定为什么做出这个决定,但我确信它背后有技术原因,如果它是一个问题,你可以手动添加一个并扩展表单处理程序来处理和验证它响应,我相信服务是参数化的,因此交换起来应该相对容易。
我的大问题是,为什么你会打扰这个?这是一笔大笔交易吗? CSRF是一个有用的步骤,但不是全面的安全解决方案,而且就个人而言,我有更大的优先级,如果它是一个大问题,它将在某个时候在FOS得到修复。 / p>
关于你的后一点,我不确定其相关性,这是如何阻止你逐渐参与的?一个快速提示,虽然我没有自己构建系统的这一部分,在我最近一直在努力的电子商务项目中,领导决定实现逐步参与(因此人们可以匿名结账)但仍然坚持很多他们的行为,很早就对新用户持有自动生成的用户名和自定义角色,如ROLE_GUEST,Symfony的默认功能证明不足以用于我们的用例。