2011-04-30 17 views
1

私は現在、CodeIgniterで開発プロジェクトを開始するためにローカル(myhostname.local)で作業しています。単純なログインフォームの送信を試みており、CSRF保護が機能していません。私は2.0.2 CodeIgniter CSRFとlocalhost

  • 私はローカルホストからすべてを実行しています(myhostname.local)
  • CI炉を使用しています

    1. An Error Was Encountered
      The action you have requested is not allowed.

      物事のカップルは注意する:私はエラーを取得します

    マイ形式:

    <?=form_open('home/login');?> 
    ... username/password fields in here ... 
    <?=form_close();> 
    

    私のコントローラ:

    public function login() 
    { 
    
        $this->form_validation->set_rules('email','Email','trim|required'); 
        $this->form_validation->set_rules('password','Password','required'); 
    
        if($this->form_validation->run() === FALSE) 
        { 
         ... form did not pass validation ... 
        } 
        else 
        { 
         ... form passed ... 
        } 
    
    } 
    

    私はhttp://myhostname.local/home/loginにフォームを送信すると、私は上記のエラーを取得します。

    これがなぜ起こっているのかについての助けを非常に感謝します。

    ありがとうございます! Sean

    +0

    これは、一度に一度だけ発生するのですか、時にはのみか、検証の失敗後にのみ発生しますか?また、あなたはそれがローカルホストだと確信していますか?これはライブサーバー上で動作しますか? –

    +0

    毎回発生します。私はライブサーバー上でそれをテストしていません。私はそれを行い、あなたに知らせるでしょう。 – seangates

    +0

    これは、特に「CodeIgniter CSRF and localhost」というタイトルのため、設定されていないクッキーと関係しているかもしれません。クッキーを設定して読むことができますか? htmlソースにもCSRFトークンがあることを完全に確認してください。私はそれがダムに聞こえることは知っていますが、最も簡単なものを最初にチェックするのは良いことです。 –

    答えて

    9

    config.phpファイルのCookieの設定値は大きな影響を与えているようです。

    $config['cookie_prefix'] = ""; 
    $config['cookie_domain'] = ""; 
    $config['cookie_path'] = "/"; 
    $config['cookie_secure'] = FALSE; 
    

    感謝を:私はデフォルトに戻ってこれらを設定すると は、すべてが正常に再び働き始めました! Sean

    +0

    これは私の場合(MacOSXのApache 2.2.24)の正解でした。しかし、私はそれを一歩進めて、これを加えました if(ENVIRONMENT === 'development')$ config ['cookie_domain'] = ''; config.phpのcookie_セクションの直後 このようにして、production/stage envにデプロイすると動作します。 –

    +0

    これは適切な時に私を助けた:) –

    2

    ローカルホスト上でMAMPを使用してCI 2.1.0を実行しています。

    CIのインストールは、全く新しいものです。単にユーザーガイドの「チュートリアル」に従ってください。最初のフォームを作成してconfigsでCSRFを有効にした後も同じエラーが発生しました。

    'form_open()'は、フォームを開くために使用されます。隠しフィールドが作成されています。エラーはと表示されます。時間:「要求した操作は許可されていません」。

    ここで示唆しているように、config.phpのクッキー設定オプションを使って遊んだあと、私のケースでは、犯人が 'cookie_prefix'設定のようです。 BLANKのままにする必要があります。それ以外の場合は、このエラーが発生します。それが空白のままになると、すべてが機能します。

    これが他の人に役立つことが期待されます。

    3

    同様の問題が発生しました。私は "あなたが要求した行動は許可されていません。"ログインフォームを送信しようとすると、エラーメッセージが表示されます。私は、ローカルの仮想Linuxボックスで作業しています。私の問題は、仮想マシンの日時設定と関係があることが判明しました。ホストマシンの日付と一致するように日付を更新すると、問題は消えます。

    私はCondeIgniter v。2.1.0を使用しています。ここで

    は私のconfig.phpファイルの一部である:

    $config['cookie_prefix'] = ""; 
    $config['cookie_domain'] = ""; 
    $config['cookie_path']  = "/"; 
    $config['cookie_secure'] = FALSE; 
    
    $config['csrf_protection'] = TRUE; 
    $config['csrf_token_name'] = 'my_csrf_token'; 
    $config['csrf_cookie_name'] = 'mycsrf'; 
    $config['csrf_expire'] = 7200; 
    

    私はこの情報は、同様の問題が発生して誰かに役立ちます願っています。