3

API を介した単純なパスワード ログインのため、最近、アプリケーションを http から https に移行しました。

ただし、そうしてから、ブラックホールに実際の問題が発生しています。Cake は、コントローラー内の API 関数への「POST」をブラックホール化するように見えますが、

$this->Security->validatePost = false;  

AppController.php に設定されている

CakePHP バージョン 2.1.3 を使用しています

コードの例は次のとおりです。

AppController.php:

function beforeFilter() 
{
    $this->Security->validatePost = false;  
    $this->Security->requireSecure(); 
}

SaleOrderController.php:

function beforeFilter()
{
    parent::beforeFilter();
    $this->Auth->allow('addApi');   // Allow access to the API without logging in.
}

この URL に POST すると、次のメッセージが返されます。

これを (ブラックホール化することなく) 機能させることができたら、validatePost = false で特定のアクションのみを実行できるように調整します。ただし、今のところ、システムを機能させたいだけです。

注: アクションへの 'GET' リクエストは正常に機能します (ブラックホール化されません)。

ここでいくつかの簡単な構成が欠けているのでしょうか、それとももっと深い問題がありますか? セキュリティ モジュールはドキュメントが少し不足しているように見えます。私の Google 検索によると、ほとんどの人が私と同じ手順を実行することでブラックホール化を回避しているようです。

4

2 に答える 2

7

以下は CakePHP 2.X では効果がないことが判明しました:

$this->Security->enabled = false;

コンポーネントを無効にするには、次のドキュメントに従う必要があります: http://book.cakephp.org/2.0/en/core-libraries/components/security-component.html

私の問題は、CakePHP 2.X の新しい可能性があると思われる CSRF 保護に関連していましたか? とにかく、SaleOrderController beforeFilter 関数内に次の行を追加するだけで済みました。

$this->Security->csrfCheck = false;

私の全体の BeforeFilter 関数は次のとおりです。

function beforeFilter()
{
    parent::beforeFilter();
    $this->Auth->allow('addApi');   // Allow access to the API without logging in.
    if (isset($this->Security) && $this->action == 'addApi') {
        $this->Security->csrfCheck = false;
        $this->Security->validatePost = false;
    }
}
于 2012-09-05T18:40:12.110 に答える
1

以下のURLを参照してください

CakePHP:サイト全体でセキュリティコンポーネントを無効にする

セキュリティコンポーネントとjQueryを使用するCakePHPフォームの入力要素を無効にする

http://life.mysiteonline.org/archives/175-Disable-the-Security-Component-in-CakePHP-only-for-Certain-Actions.html

http://book.cakephp.org/2.0/en/core-libraries/components/security-component.html

http://api.cakephp.org/class/security-component

または試してみてください:-

app_controllerで無効にしても、個々のコントローラーでそのセキュリティが有効になっている可能性があります。私の推測では、これがあなたのやりたいことです。そうでない場合は、詳細をお知らせください。

function beforeFilter(){
    parent::beforeFilter();

    if(isset($this->Security) && $this->RequestHandler->isAjax() && $this->action = 'add'){

        $this->Security->enabled = false;

    }

}
于 2012-09-05T06:39:58.333 に答える