2016-06-27 8 views
1

私たちは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; 

は、クッキーの設定です:ここで

$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/'); 
    } 
} 

これらの2つの機能は、POSTメソッドとcalli 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" 

からログを知っていますか?

+0

(強力な暗号化キーのパスワードを設定することを忘れないでください)暗号化キーを設定し、あなたがそれを保存する前に、すべてのセッション値を暗号化することをお勧めします、あなたは使いますかセッションクッキー?そうした場合は、リクエストごとにセッションIDを更新しますか? https://www.owasp.org/index.php/Session_fixation – Jojo01

+0

私たちはCodeIgniterが私たちに与える機能を使用しているので、作業を行うべきだと思っていましたが、私はその情報をどのように確認できますか? –

+0

しかし、ハッカーが既存のセッションを使用した、または彼はそれに別のトリックを使用しました。 –

答えて

0

CodeIgniterは開発すべき最高のPHPフレームワークの中でも、間違いなくセッションを正しく保存できないという問題がありました。つまり、セッションデータをCOOKIEに暗号化された形式で保存することに注意しました。したがって、使用しているシステムと使用されているハッシュアルゴリズムに関する十分な知識があれば、攻撃者はすべてのCookieデータをセッションデータに変換できました。しかし、この問題はCodeIgniter v3がリリースされる前に解決されました。 しかし、私はセッションを保存する最良の方法は次のようになると考えています:

1.セッションクラスを自動ロードせず、必要に応じてロードします。
2.過剰拡張けどdefined('BASEPATH') or exit('No direct script access allowed') 3.すなわち、BasePath変数または終了を定義し、私は

関連する問題