時,這裏是我的形式,即使檢測到:Symfony的CSRF攻擊路過_csrf_token
<form novalidate action="<?php echo url_for('article/submit') ?>" method="POST">
<?php echo $form['title']->renderRow() ?>
<?php echo $form['content']->renderRow() ?>
<?php echo $form->renderHiddenFields() ?>
<input type="submit" value="Save"/>
</form>
而綜觀目前生成的HTML源,在_csrf_token
其實是在渲染。這裏是我的行動:
public function executeSubmit(sfWebRequest $request)
{
$this->forward404Unless($request->isMethod('post'));
$request->checkCSRFProtection();
die('submitting post...');
}
錯誤:
_csrf_token [CSRF attack detected.]
即使在我的動作,如果我做一個var_dump($_POST); die;
我得到:
Array
(
[title] => string(8) "My title"
[content] => string(10) "My Content"
[_csrf_token] => string(32) "<my token here>"
)
所以CSRF令牌肯定是被渲染和正確傳遞。我究竟做錯了什麼?
另外,在任何地方是否有任何有關checkCSRFProtection()
的文檔? API文檔除了承認它存在之外,不會對它做任何說明。
的問題是,我試圖檢查使用'checkCSRFProtection()',而不是試圖用一種形式'isValid()'方法。謝謝你的幫助。 Symfony 1.4 API文檔不提供關於'checkCSRFProtection()'的任何細節。很高興知道它只適用於'link_to()'。再次感謝! –
@Jakobud:很高興我能幫忙!是的,文檔看起來很蹩腳 –
@jakobud:對於可能沒有實際表單來驗證的情況,您可以使用'checkCSRFProtection' ...例如簡單的ajax post請求刪除記錄。你可以看到生成的管理模塊中的一些例子和刪除操作,如果我記得正確。 – prodigitalson