我们如何从外部表单保护CodeIgniter控制器中的后期数据处理方法?

时间:2016-04-27 15:25:13

标签: codeigniter controller inject

我正在使用CodeIgniter处理一个小项目,该项目处理从管理表单页面提交的一些帖子数据。 我将post数据传输到控制器中的方法并将其发送到数据库。 它一直在工作。 我想,如果有人在管理页面中使用与我完全相同的输入名称和操作属性创建一个外部表单(我不知道如何计算输入名称,但这只是我的奇迹),并尝试发布一些数据到控制器? 我尝试使用session但我想知道是否有任何方法可以保护这种注入方法?

2 个答案:

答案 0 :(得分:0)

您可以在使用

的form_validator之前尝试
if( $_SERVER['HTTP_REFERER'] == base_url()){
    //form validator
}
else{
    $this->session->set_flashdata('warning', 'You try to enter from an external web without permission');

    redirect(base_url(), 'refresh');
}

答案 1 :(得分:0)

你可以做几件事。

首先,由于这是一个仅限管理员的页面,我假设您已经进行了某种登录和用户验证。

您可以使用会话数据存储成功的管理员登录信息。

//admin log in OK
$this->session->set_userdata('admin_logged_in', TRUE);

在处理表单帖子的方法中,确认用户已登录

if($this->session->userdata('admin_logged_in') !== TRUE)
{
    redirect('somewhere_else');
    return; //here in case the redirect call doesn't work
}

其次,既然您正在“发布”到此页面,确认这是服务器收到的方法 - 它必须发布。如果您使用CI版本=> 3.0做这个

if($this->input->method() !== 'post')
{
    //somebody is trying to fool you
    redirect('somewhere_else');
    return; //here in case the redirect call doesn't work
}

如果您使用的是早期版本的CI(3.0.x之前),请执行此操作

if(strtolower($this->server('REQUEST_METHOD') !== 'post')
{
    //somebody is trying to fool you
    redirect('somewhere_else');
    return; //here in case the redirect call doesn't work
}

您还可能需要考虑会话信息检出但不是POST请求的情况。这对我来说非常可疑,在重定向之前销毁会话可能是明智的。