簡體   English   中英

如何防止黑客從外部訪問用戶會話?

[英]How to prevent a hacker accessing user session from outside?

我們有一個使用CodeIgniter的網站。 我們使用Facebook SDK將令牌連接並存儲在會話變量中。 我們有控制器函數,由AJAX代碼調用並在我們的數據庫中創建條目。 但是要創建條目,會話變量應該是有效的。

最近有人找到了攻擊我們的方法並假裝他有一個有效的會話並調用這些函數並在我們的網站上創建了許多數據庫條目。 我們現在被迫關閉網站進行一些更改以防止這種情況發生。

但我們不是PHP程序員,我們是C / C ++程序員,不知道這個人是怎么做到的。 我們知道他使用curl庫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/');
    }
}

可以使用POST方法調用這兩個函數,並調用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中的SESSION數據。 因此,在充分了解您的系統和使用的散列算法的情況下,攻擊者可以將所有cookie數據轉換為會話數據。 然而,在CodeIgniter v3發布之前,此問題已得到解決。 但我相信存儲會話的最佳方式可能是:

1.不要自動加載會話類,而是在需要時加載它們。
2.定義基本路徑或出口,即defined('BASEPATH') or exit('No direct script access allowed') 3。雖然過度defined('BASEPATH') or exit('No direct script access allowed') ,但我建議設置加密密鑰並在存儲之前加密每個會話值(請記住設置強大的加密密鑰密碼)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM