如何实现CSRF保护吗

编辑该页面

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

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

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

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

在使用CSRF保护之前,将其安装在您的项目中(这反过来需要安装Symfony的表单组件):ob娱乐下载

1
美元作曲家要求symfony secuob娱乐下载rity-csrf symfony /形式

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

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

登录CSRF攻击可以避免使用相同的技术隐藏CSRF标记添加到登录表单。安全组件已经提供了CSRF保护,但您需要配置一些选项之前使用它。

提示

如果你使用后卫身份,您将需要手动验证CSRF令牌里面的类。看到如何创建一个自定义的身份验证系统,保安吗获取详细信息。

首先,配置CSRF牌供应商所使用的表单登录您的安全配置。您可以将这个参数设置为使用默认提供者可用的安全组件:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10
#配置/包/ security.yaml安全:#……防火墙:secured_area:#……form_login:#……csrf_token_generator:security.csrf.token_manager

然后,使用csrf_token ()函数在树枝模板来生成一个CSRF令牌并将其存储为表单的隐藏字段。默认情况下,必须调用HTML字段_csrf_token和用于生成值必须是字符串进行身份验证:

1 2 3 4 5 6 7 8 9 10 11 12
{/安全/ login.html #模板。树枝#}{#……#}<形式行动={{路径(“登录”)}}方法=“职位”>{#……登录字段#}<输入类型=“隐藏”的名字=“_csrf_token”价值={{csrf_token(验证)}}><按钮类型=“提交”>登录< /按钮>< /形式>

在这之后,你有保护你的登录表单CSRF攻击。

提示

你可以改变通过设置的名称字段csrf_parameter通过设置和改变令牌IDcsrf_token_id在你的配置:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10 11
#配置/包/ security.yaml安全:#……防火墙:secured_area:#……form_login:#……csrf_parameter:_csrf_security_tokencsrf_token_id:a_private_string

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
使用ob娱乐下载\组件\HttpFoundation\请求;/ /……公共函数删除(请求美元请求){美元submittedToken=美元请求- >请求- >get (“令牌”);/ / delete item是相同的值中使用模板生成令牌如果(美元- >isCsrfTokenValid (“delete item”,美元submittedToken)){/ /……做一些事情,像删除一个对象}}

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