2016-09-14 14 views
0

CakePHP v3でcsrfセキュリティコンポーネントを有効にしました。 initialize()方法CakePHP v3のすべてのページリロード要求でCSRFトークンが更新されない

パブリック関数の初期化()Iはい、それはCSRFトークンを表示するコード

echo $this->Form->create(....); 
// some of other stuffs 
echo $this->Form->end(); 

下に使用していビュー側の{

// some of my other initialization here 
    $this->loadComponent('Csrf'); 

    // some of my other initialization here 

}

AppConroller.phpファイル内CSRFトークン値を持つformタグの下の隠しフィールドに入力します。しかし、ページリロード後CSRFトークン値は同じままです。

CSRFトークンの実際の概念は、すべての要求に対して新しいCSRFトークンを生成します。 CakePHP v3でこれをどのように達成できますか?

答えて

0

ほとんどのアプリケーションで、すべての要求に対して新しいcsrfトークンを作成する必要はありません。ユーザーセッションあたり1つのセッションがうまくいき、使いやすさも向上します(ユーザーは戻るボタンなどを使用できます)。ログオン時にトークンが生成された場合でも、攻撃者はそれを推測してアプリケーションへの外部要求を作成することはできません。それでも、要求ごとに新しいcsrfトークンを使用すると、セキュリティが少し向上し、実装エラーが発生しにくくなる可能性がありますが、これはほとんどのアプリケーションで最も弱いことではありません。

さらに詳しい説明は、hereをご覧ください。

0

フォームが作成されたときにCakePHPがcsrfトークンを作成します。これは、すでに設定されているものがない場合のみです。 Cookieが存在する場合は削除するスクリプトを作成する必要があります。デフォルトでは、クッキー名はcsrfTokenですが、あなたはの線に沿って$this->loadComponent('Csrf');

何か初期化のparamとしてcookieNameを使用して手動で設定することができます。vendor/cakephp/cakephp/src/controller/component/CsrfComponent.php

public function initialize() { 
    parent::initialize(); 
    $this->loadComponent('Csrf'); 
    $this->loadComponent('Cookie'); 
} 

public function beforeFilter(Event $event) { 
    parent::beforeFilter($event); 
    $cookieData = $this->request->cookie('csrfToken'); 
    if ($cookieData) { 
     $this->Cookie->delete('csrfToken'); 
    } 
} 

csrfComponentをされます

関連する問題