我在Codeigniter中启用了csrf保护。使用form_open()
我能够生成一个隐藏的csrf值,应该在我的控制器中验证。但是我没有提交任何输入字段,只是通过表单操作传递url参数。
在我的控制器中,我不需要设置验证规则,所以我有
function delete_post($post_id = '') //post id passed via 3rd URL segment
{
if (is_int($post_id) && valid_post($post_id)) //valid_post() returns true if post id exists
{
$this->Posts_model->delete_post_model($post_id);
redirect('site');
}
}
如果没有验证规则,Csrf保护似乎不起作用。是否可以在不通过隐藏输入传递post_id
的情况下完成此工作?
答案 0 :(得分:3)
正如您所看到的in the code of the Security class,CSRF保护仅适用于POST
数据(表单验证实际上也适用于POST
数据。)
您应该使用CodeIgniter方式并使用POST
请求。如果您使用的是AJAX,则只需将GET
更改为POST
,如果您使用的是表单,请将方法设置为post
。如果你不能这样做,那么你将不得不与CodeIgniter核心代码作斗争,所以试着解释原因。 :)