没有表单验证的Codeigniter csrf保护

时间:2011-07-28 17:07:18

标签: php forms validation codeigniter csrf

我在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的情况下完成此工作?

1 个答案:

答案 0 :(得分:3)

正如您所看到的in the code of the Security class,CSRF保护仅适用于POST数据(表单验证实际上也适用于POST数据。)

您应该使用CodeIgniter方式并使用POST请求。如果您使用的是AJAX,则只需将GET更改为POST,如果您使用的是表单,请将方法设置为post。如果你不能这样做,那么你将不得不与CodeIgniter核心代码作斗争,所以试着解释原因。 :)