没有表单验证的编码器csrf保护


Codeigniter csrf protection without form validation

我在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 ?

正如您在Security类的代码中看到的那样,CSRF保护仅适用于POST数据(表单验证实际上也适用于POST数据)。

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