在cookie中使用信号auth-token进行身份验证是否安全(仅通过ajax发布和请求json)?
为什么攻击者无法在隐藏字段中获取表单令牌?
攻击者如何使用POST请求进行CSRF攻击?
答案 0 :(得分:15)
在cookie中使用单个令牌进行身份验证是否安全?
排序,如果该cookie仅限HTTP(有助于防止XSS)和SSL,那么您网站外的任何人都无法读取该cookie。
但是,用户的浏览器可以保留该cookie,并且只要他们的浏览器再次从您的应用程序请求页面,它就会自动发送它。当用户浏览您的站点时,以及如何进行CSRF攻击时,这是理想的。
为什么攻击者无法在隐藏字段中获取表单令牌?
在CSRF攻击中,黑客实际上无法读取您的网站或cookie,因为它应该受SSL / HTTPS保护。 CSRF的工作原理是欺骗您的浏览器将您的数据与您的安全数据一起发送到您的网站。
因此,隐藏字段中的值是针对CSRF的默认防御的一部分 - 它们在cookie中具有秘密值(黑客可以欺骗浏览器重新发送但无法查看或编辑)并且相同加密页面中的隐藏输入字段中的值(黑客无法访问)。如果cookie和隐藏值不匹配,那么您就会受到CSRF攻击。
攻击者如何使用POST请求执行CSRF攻击?
好的,假设你有一个安全的网站。您可以使用SSL登录此站点,然后您将获得一个仅限HTTP的SSL身份验证cookie,以便您保持登录状态。
现在我在一个完全不同的网站上有了一个新页面。如果我从我的网站链接到您的网站,那么当您点击该链接时,它将离开我的网站并转到您的网站,传递您的Cookie。
如果我在我的网页上添加一个HTML <form>
,那么会发回同样的事情:浏览器会返回您的网站并发送表单中的所有数据以及您的Cookie。
请注意,我没有读取您的Cookie或您网站上的任何网页,因为两者都受SSL加密保护。
为了达到完整效果,我可以在页面上隐藏该表单,以便用户甚至不会意识到他们正在回复您的网站。
一个微不足道的例子就是Facebook上的“赞”功能 - 他们现在已修补了这个功能,但有一段时间我可以欺骗你的浏览器(无需访问你的详细信息)将你的身份验证cookie发送给Facebook的动作那说你喜欢我想要的东西。