html表单没有csrf保护,如何在Symfony 1.4中为表单禁用CSRF保护/验证
csrf令牌可為你的表單提供保護(hù), 使其免受跨站請(qǐng)求偽造(CSRF)的攻擊, 該攻擊迫使最終用戶在當(dāng)前已通過身份驗(yàn)證的Web應(yīng)用程序上執(zhí)行不需要的操作。在某些項(xiàng)目中, 由于缺少在視圖中定義同一實(shí)體的多種形式的symfony, 你最終將使用HTML手動(dòng)設(shè)計(jì)表單(這意味著視圖上未呈現(xiàn)任何sfForm實(shí)例, 并且沒有CSRF保護(hù)已啟用), 但是使用symfony的默認(rèn)綁定器存儲(chǔ)來自數(shù)組的信息, 例如:
// Some data that will be binded from an array to the model
$formData = array(
"title" => "Hello World", "content" => "Bla bla bla ..."
);
// Define the form
$this->form = new SomeModelForm();
// Deal with the request
if ($request->isMethod('post'))
{
$this->form->bind($formData);
if ($this->form->isValid())
{
// Rest of logic
}
}
如果數(shù)據(jù)與定義的模型匹配, 則綁定過程將成功進(jìn)行綁定, 但是你將看到一個(gè)異常, 該異常指定該格式無效, 因?yàn)開csrf_token字段不可用(只要你的csrf保護(hù)已啟用)項(xiàng)目):
500 Internal Server Error:_csrf_token [必需。]
在這種情況下, 如果你知道自己在做什么, 并且了解禁用_csrf_token的含義(例如, 在不需要CSRF的情況下, 而是使用了api鍵或類似的方法), 則可以不全局禁用它, 而是特別是針對(duì)你需要的所有表格, 只需一行代碼。
以一種形式禁用CSRF令牌
要從表單中禁用CSRF保護(hù), 只需從中調(diào)用getValidor方法, 該方法將CSRF令牌的名稱作為第一個(gè)參數(shù)(從方法getCSRFFieldName自動(dòng)生成), 然后從返回的值中調(diào)用setOption方法, 定義所需的選項(xiàng)為false。
你基本上要做的是將_csrf_token字段設(shè)置為不需要, 因此你的表單將是有效的, 僅此而已:
// Define the form
$this->form = new SomeModelForm();
// Disable CSRF protection
$this->form->getValidator($form->getCSRFFieldName())->setOption('required', false);
// Rest of logic, where the form will be valid
編碼愉快!
總結(jié)
以上是生活随笔為你收集整理的html表单没有csrf保护,如何在Symfony 1.4中为表单禁用CSRF保护/验证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 五年级计算机学情分析,五年级学情分析
- 下一篇: 微型计算机原理与接口技术教材,微型计算机