如何实现CSRF保护吗

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

跨站点请求伪造——是一个恶意用户的方法试图让你合法用户在不知情的情况下提交数据,他们不打算提交。

CSRF保护是通过表单添加一个隐藏字段,其中包含一个值,只有你和你的用户知道。这可以确保用户——而不是其他实体——提交给数据。

在使用CSRF保护之前,将其安装在您的项目:

1
美元作曲家需要symfony / seob娱乐下载curity-csrf

然后,启用/禁用CSRF保护的csrf_protection选项(见CSRF配置参考更多信息):

  • YAML
  • XML
  • PHP
1 2 3 4
#配置/包/ framework.yaml框架:#……csrf_protection:~

令牌用于CSRF保护是不同的每个用户存储在会话中。这就是为什么一个会话自动开始就呈现一种形式与CSRF保护。

此外,这意味着您不能完全缓存页面,包括CSRF保护形式。作为一种替代方法,您可以:

  • 在一个未嵌入形式ESI片段和缓存页面的其余部分内容;
  • 缓存整个页面加载形式通过一个未AJAX请求;
  • 缓存整个页面和使用hinclude.jsCSRF令牌和一个未加载AJAX请求和替换表单字段的值。

如何构建一个登录表单吗为防止CSRF攻击一个登录表单。您还可以配置CSRF保护注销操作

csrf_token()树枝函数模板中生成一个CSRF令牌并将其存储为一个隐藏的表单字段:

1 2 3 4 5 6
<形式行动={{url (admin_post_delete, {id:职位。id})}}方法=“职位”>{# csrf_token的论点()是一个任意字符串用于生成令牌#}<输入类型=“隐藏”的名字=“令牌”价值={{csrf_token (delete item)}}/ ><按钮类型=“提交”>删除项目< /按钮>< /形式>

然后,CSRF令牌的值在控制器操作和使用isCsrfTokenValid ()检查它的有效性:

1 2 3 4 5 6 7 8 9 10 11 12 13
使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\HttpFoundation\响应;/ /……公共函数删除(请求美元请求):响应{美元submittedToken=美元请求- >请求- >get (“令牌”);/ / delete item是相同的值中使用模板生成令牌如果(美元- >isCsrfTokenValid (“delete item”,美元submittedToken)){/ /……做一些事情,像删除一个对象}}

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。