2008-12-22

开启symfony的CSRF保护

类归于: CentOS/Redhat, symfony — 标签:maker @ 14:48

什么是CSRF?

CSRF是伪造客户端请求的一种攻击,CSRF的英文全称是Cross Site Request Forgery,字面上的意思是跨站点伪造请求。

symfony 1.2中内置了CSRF验证功能, 用来防止CSRF攻击, 在建立项目的时候我们可以使用如下命令开启CSRF保护.

> symfony generate:app --csrf-secret=UniqueSecret frontend

或者修改app的settings.yml

all:
  csrf-secret=UniqueSecret

开启CSRF保护之后app中的所有form都会增加一个隐藏项, 其值为随机生成的一个字符串, 表单提交之后会对该字符串进行验证, 工作原理类似验证码, 但免去了输入验证码的麻烦.

为了更好的兼容性(这里指开启和不开启CSRF的时候都可以正常运行), 我们需要修改form取得值的方法, 使用

$form->bind($request->getPostParameters());

可能是CSRF相关的功能还没有足够的完善, 在之前的测试中, 当form的submit按钮有name的时候会产生表单错误, 造成表单无法提交, 如果非必要情况, 最好将submit的name设置为空或者不设置.

但有时候我们的确需要给submit一个name, 比如但表单多submit的情况. 这时我们就需要用另外一种方法了, 在form中加入下面代码.

$this->validatorSchema -> setOption('allow_extra_fileds', true);

这样表单验证会允许存在不属于form的field.

评论暂缺 »

还没有任何评论。

这篇文章上的评论 RSS feed TrackBack URL

留下评论

WordPress 所驱动