如何实施CSRF保护

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.7,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

如何实施CSRF保护

CSRF -或跨站请求伪造-是一种恶意用户试图让合法用户在不知情的情况下提交他们不打算提交的数据的方法。幸运的是,可以通过在表单中使用CSRF令牌来防止CSRF攻击。

好消息是,默认情况欧宝app在哪里找下,Symfony会自动嵌入并验证CSRF令牌。欧宝娱乐app下载地址这意味着您不需要做任何事情就可以利用CSRF保护。事实上,本文中的每个表单都利用了CSRF的保护!

CSRF保护工作通过添加一个隐藏字段到您的表单-称为_token默认情况下-包含一个只有您和您的用户知道的值。这确保提交给定数据的是用户(而不是其他实体)。欧宝娱乐app下载地址Symfony自动验证这个令牌的存在和准确性。

_token字段是一个隐藏字段,如果包含form_end ()函数,该函数确保输出所有未呈现的字段。

谨慎

由于令牌存储在会话中,因此在呈现带有CSRF保护的表单时,会话将自动启动。

可以逐个表单地定制CSRF令牌。例如:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
/ /……使用AppBundle实体任务使用欧宝娱乐app下载地址组件OptionsResolverOptionsResolverTaskType扩展AbstractType/ /……公共函数configureOptions(OptionsResolver解析器解析器->setDefaults (数组“data_class”= >任务::类,“csrf_protection”= >真正的“csrf_field_name”= >“_token”//帮助生成秘密令牌的唯一密钥“csrf_token_id”= >“task_item”));}/ /……

若要禁用CSRF保护,请设置csrf_protection选项为false。还可以在项目中进行全局自定义。有关更多信息,请参见表单配置参考部分。

请注意

csrf_token_idOption是可选的,但通过使每个表单的令牌都不同,极大地增强了所生成令牌的安全性。

谨慎

CSRF令牌对于每个用户都是不同的。这就是为什么在尝试缓存包含这种保护的表单的页面时需要谨慎的原因。有关更多信息,请参见缓存包含CSRF保护表单的页面

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。