2012-03-09 48 views
1

在cookie中使用信号auth-token进行身份验证安全吗(通过ajax发布并仅要求json)?有关CSRF的问题

为什么攻击者无法在隐藏字段中获取表单令牌?

攻击者如何用POST请求进行CSRF攻击?

+0

请说明你的第一个问题。 – Gumbo 2012-03-10 10:54:09

回答

10

在cookie中使用单个令牌进行身份验证安全吗?

排序,如果该cookie是仅HTTP(这有助于防止XSS)和SSL,那么您的站点之外的任何人都无法读取该cookie。

但是,用户的浏览器可以保留该cookie,并在浏览器再次从您的应用程序请求页面时自动发送该cookie。当用户浏览您的网站时,这是理想的,但也是CSRF攻击是可能的。

为什么攻击者无法在隐藏字段中获取表单标记?

在CSRF攻击中,黑客实际上无法读取您的站点或cookie,因为它应该受SSL/HTTPS保护。 CSRF通过愚弄您的浏览器将您的数据和安全数据发送到您的网站。

因此,隐藏字段中的值是针对CSRF的默认防御的一部分 - 它们在cookie中具有秘密值(黑客可以欺骗浏览器重新发送但无法看到或编辑),而且加密页面中隐藏的输入字段中的值相同(黑客无法获得)。如果cookie和隐藏的值不匹配,那么你有CSRF攻击。

攻击者如何利用POST请求执行CSRF攻击?

好的,假设你有一个安全的网站。您可以使用SSL登录到该站点,并且您将收到一个HTTP-only SSL身份验证cookie,以便您保持登录状态。

现在我有一个新页面,位于完全不同的站点上。如果我从我的网站链接到您的网站,那么当您点击该链接时,它将离开我的网站并转到您的网站,传递您的Cookie。

如果我在页面上添加一个HTML <form>,并发布回您的网站,则会发生同样的事情:浏览器返回您的网站并发送表单中的任何数据以及您的cookie。

请注意,我还没有阅读您的Cookie或您网站上的任何页面,因为两者都受到SSL加密保护。

为了达到完整的效果,我可以将该表单隐藏在页面上,以便用户甚至不会意识到他们将发送回您的网站。

这是一个简单的例子,它是Facebook上的'Like'功能 - 他们已经修补了这个现在我想,但一段时间,我可以欺骗你的浏览器(不访问你的详细信息)发送你的身份验证cookie到Facebook行动,说你喜欢我想要的东西。