10

バージョン 2.0.3 のローカル ホストで正常に動作する Gallery という名前のモジュールを作成しましたが、リモート サイトでバージョン 2.1.0 を使用すると、フォームを送信できず、エラーが発生します。

要求したアクションは許可されていません。

どうしてこれなの?

4

11 に答える 11

15

これは、CSRF保護に関連するCodeigniterエラーです。でキャンセルできますcms/config/config.php

于 2012-04-30T16:17:44.147 に答える
3

プログラミングに関しては、問題を回避するのではなく、修正します。私が言いたいのは、この機能が使用できない場合、この機能はここにないということです。実装に問題があるだけです。

私の答え: 以下に示すように、application/config/config.php の次のエントリの値からすべてのダッシュ、ピリオド、およびその他の英数字以外の文字を削除します。

$config['sess_cookie_name'] = 'mycookiename'; //instead of "my_cookie_name"
$config['csrf_token_name']  = 'mycsrftoken';  //instead of "my.csrf.token"
$config['csrf_cookie_name'] = 'mycsrfcookie'; //instead of "my/csrf/cookie"

ところで、ダッシュが機能することもありますが、構成値に名前を付けるときは、可能な限り単一の単語を使用することをお勧めします。安全に作業できることを確認するためだけに、現在取り組んでいるものに関連する Codeigniter のコア ファイルを研究する時間とスキルがない限り、そうではありません。

とにかく、私の答えは1年以上遅れていますが、これが誰かの助けになることを願っています.

于 2013-07-24T05:27:49.130 に答える
3

CI の外部 (Joomla) で作成されたフォームがありますが、CI で処理したいと考えていました。私の修正は、特定のリファラーに対して csrf を選択的に無効にすることでした。csrf のデフォルト設定オプションの直後に、これを設定に追加しました。

/* Set csrf off for specific referrers */
$csrf_off = array(
    "http://yourdomain.com/your-form-url",
    "http://yourdomain.com/some-other-url"
);

if (isset($_SERVER["HTTP_REFERER"])) {
    if (in_array($_SERVER["HTTP_REFERER"],$csrf_off)) {
        $config['csrf_protection'] = false;
    }
}

これにより、$csrf_off 配列内の特定の URL に対する csrf 保護が無効になりますが、他のすべての要求に対してはそのまま残ります。

于 2014-02-23T00:20:18.777 に答える
2

フォームヘルパー関数を使用して見つけました

<?php echo form_open('controller/function');?>

<?php echo form_input('username', 'Username');?>

<?php echo form_close();?>

上記のようなヘルパー関数を使用すると、CSRF エラー メッセージの表示が停止するはずです。

echo form_input() を使用しない場合、通常の入力だけを配置すると、リロード時に CSRF エラーがトリガーされます。

<?php echo form_open('controller/function');?>

<input type="text" name="username" />

<?php echo form_close();?>

したがって、今すぐすべてのフォーム ヘルパー関数を使用することをお勧めします。

于 2016-12-23T04:18:32.203 に答える
1

これは古い質問ですが、これと同じ問題で非常に時間がかかったので、私の場合の問題を共有したいと思いました。それは誰かを助けるかもしれません。

Codeigniter 3.0.6 と CommunityAuth 3 を一緒に使用していますが、ログイン後にこのエラーが発生していました。

問題が発生する場合と発生しない場合があるため、混乱を招きました。

CI の config.php の「base_url」は、「www.mysite.com」のようなものに設定されていました

「mysite.com」でサイトを閲覧し (「www」がアドレスに含まれていないことに注意してください)、CI の「base_url」設定を使用するフォーム送信を行うと、CommunityAuth のログインと同様に、CSRF チェックが失敗し、「Theあなたが要求したアクションは許可されていません。エラー。

于 2016-05-02T22:11:02.563 に答える
0

次のように codeigniter フォーム オープナーを使用します。

<php echo form_open(url,method,attributes);?>

詳細については、codeigniter フォームのドキュメントを参照してください。

于 2015-12-10T13:42:27.490 に答える
0

私はCodeigniter 3と同じ問題を使用しています

要求したアクションは許可されていません。

Isaac Pak の指摘に基づいて、base_url を通常アドレス バーに入力したものに変更しました。このような...

置く代わりに

http://www.domain.org

このように書きます..

http://domain.org

base_url()はちょうど..

$config['base_url'] = 'http://domain.org/';

修正は私のサイトで機能します...

于 2016-09-02T14:42:06.757 に答える
0

私にとっての問題は、次のように変更して機能したよりも、インデックスにビューをロードしていたことです。

public function index()
{
    // Load Login Page
    redirect('login/login_page','refresh');

}

public function login_page()
{
    $data['title'] = 'Login Page';

    $this->load->view('templates/header', $data);
    $this->load->view('users/login_view', $data);
    $this->load->view('templates/footer');
}
于 2016-10-27T00:14:57.470 に答える