如何防止黑客从外部访问用户会话



我们有一个使用CodeIgniter的网站。我们使用Facebook SDK将令牌连接和存储在会话变量中。我们的控制器功能由AJAX代码调用,并在我们的数据库中创建条目。但是要创建条目一个会话变量应有效。

最近有人找到了一种攻击我们的方法,并假装他有一个有效的会话并称这些功能并在我们的网站中创建许多数据基础条目。现在,我们被迫关闭网站以进行一些更改以防止这种情况。

但是我们不是PHP程序员,我们是C/C 程序员,并且不知道该人是如何做到的。我们知道他使用了卷曲库7.43.0。

有人可以帮助我们纠正我们的代码吗?顺便说一句,我们不是HTTPS网站。

这是Codeigniter的会话配置:

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 1800;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = TRUE;
$config['sess_time_to_update'] = 60;
$config['sess_regenerate_destroy'] = TRUE;

这是cookie配置:

$config['cookie_prefix']    = 'liftoffre_';
$config['cookie_domain']    = $domain;
$config['cookie_path']      = '/';
$config['cookie_secure']    = FALSE;
$config['cookie_httponly']  = FALSE;

这是我们在数据库上创建条目之前使用的代码:

public function create_offer()
{
    if($this->session->userdata('token') != null)
    {
        $titre = "Nouvelle offre";
        $data = array(
            'userGraph' => $this->session->userdata('userData'),
            'titre' => $titre
        );
        $this->load->view('nouvelle_offre', $data);
    }
    else
    {
        redirect('/main/');
    }
}
public function ajouter_offre()
{
    if($this->session->userdata('token') != null) {
        $data = array(
            'offre_departure_name' => $this->input->post('offre_departure_name', TRUE),
            'offre_departure_adresse' => $this->input->post('offre_departure_adresse', TRUE),
            'offre_departure_province' => $this->input->post('offre_departure_province', TRUE),
            'offre_departure_city' => $this->input->post('offre_departure_city', TRUE),
            'offre_arrival_name' => $this->input->post('offre_arrival_name', TRUE),
            'offre_arrival_adresse' => $this->input->post('offre_arrival_adresse', TRUE),
            'offre_arrival_province' => $this->input->post('offre_arrival_province', TRUE),
            'offre_arrival_city' => $this->input->post('offre_arrival_city', TRUE),
            'offre_datetime' => $this->input->post('offre_datetime', TRUE),
            'offre_price' => $this->input->post('offre_price', TRUE),
            'offre_seats_number' => $this->input->post('offre_seats_number', TRUE),
            'offre_userid' => $this->input->post('offre_userid', TRUE),
            'offre_commentaire' => $this->input->post('offre_commentaire', TRUE),
        );
        $this->load->model('Datasource');
        $this->Datasource->add_offer($data);
    }
    else
    {
        redirect('/main/');
    }
}

可以通过使用邮政方法和呼叫链接(例如domain.com/index.php/controller/function。

)来调用这两个函数。

这里是从服务器的日志

209.222.7.236 - - [27/Jun/2016:06:50:33 -0700] "POST /index.php/nouvelleoffre/ajouter_offre/ HTTP/1.1" 200 - "-" "curl/7.43.0"

有人知道如何帮助我们吗?

codeigniter虽然毫无疑问是要开发的最佳PHP框架之一,但问题的问题是无法正确存储会话,即在cookie中存储会话数据,只有在加密中存储了会话数据格式。因此,借助有关您的系统和使用的哈希算法的足够知识,攻击者可以将所有Cookie数据转换为会话数据。该问题已经解决,但是在发布Codeigniter V3之前。但是我相信,存储会议的最佳方法可能是:

1.不要自动加载会话课,而是在需要时加载它们。
2.定义基台或出口,即defined('BASEPATH') or exit('No direct script access allowed')3.尽管过度伸展,我建议在存储之前设置加密密钥并加密每个会话值(请记住设置强加密密码密码)

最新更新