如何实施CSRF保护

编辑本页

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

CSRF保护的工作原理是在表单中添加一个隐藏字段,该字段包含只有您和用户知道的值。这确保提交给定数据的是用户(而不是其他实体)。

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

1
作曲家需要symfony/secuob娱乐下载rity-csrf

,启用/禁用CSRF保护csrf_protection选项(请参阅CSRF配置参考欲知更多资料):

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

用于CSRF保护的令牌对于每个用户都是不同的,它们存储在会话中。这就是为什么在呈现带有CSRF保护的表单时,会话就会自动启动。

此外,这意味着不能完全缓存包含受CSRF保护的表单的页面。作为替代,你可以:

  • 将表单嵌入uncached对象中ESI片段并缓存余下的页面内容;
  • 缓存整个页面,并通过非缓存AJAX请求加载表单;
  • 缓存整个页面并使用hinclude.js使用非缓存AJAX请求加载CSRF令牌,并用它替换表单字段值。

安全用于保护不受CSRF攻击的登录表单。还可以配置注销操作的CSRF保护

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

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

然后,在控制器动作中获取CSRF令牌的值并使用isCsrfTokenValid ()检查其有效性的方法:

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

违反而且犯罪是使用HTTP压缩时针对HTTPS的安全漏洞。攻击者可以利用压缩泄露的信息来恢复明文的目标部分。为了减轻这些攻击,并防止攻击者猜测CSRF令牌,会在令牌前加上一个随机掩码,并用于打乱它。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
ob娱乐下载Symfony 6.0支持通过SensioLabs