html表单没有csrf保护,如何在Symfony 1.4中为表单禁用CSRF保护/验证
csrf令牌可為你的表單提供保護, 使其免受跨站請求偽造(CSRF)的攻擊, 該攻擊迫使最終用戶在當前已通過身份驗證的Web應用程序上執行不需要的操作。在某些項目中, 由于缺少在視圖中定義同一實體的多種形式的symfony, 你最終將使用HTML手動設計表單(這意味著視圖上未呈現任何sfForm實例, 并且沒有CSRF保護已啟用), 但是使用symfony的默認綁定器存儲來自數組的信息, 例如:
// 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
}
}
如果數據與定義的模型匹配, 則綁定過程將成功進行綁定, 但是你將看到一個異常, 該異常指定該格式無效, 因為_csrf_token字段不可用(只要你的csrf保護已啟用)項目):
500 Internal Server Error:_csrf_token [必需。]
在這種情況下, 如果你知道自己在做什么, 并且了解禁用_csrf_token的含義(例如, 在不需要CSRF的情況下, 而是使用了api鍵或類似的方法), 則可以不全局禁用它, 而是特別是針對你需要的所有表格, 只需一行代碼。
以一種形式禁用CSRF令牌
要從表單中禁用CSRF保護, 只需從中調用getValidor方法, 該方法將CSRF令牌的名稱作為第一個參數(從方法getCSRFFieldName自動生成), 然后從返回的值中調用setOption方法, 定義所需的選項為false。
你基本上要做的是將_csrf_token字段設置為不需要, 因此你的表單將是有效的, 僅此而已:
// 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
編碼愉快!
總結
以上是生活随笔為你收集整理的html表单没有csrf保护,如何在Symfony 1.4中为表单禁用CSRF保护/验证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 五年级计算机学情分析,五年级学情分析
- 下一篇: 微型计算机原理与接口技术教材,微型计算机