Запрошенное действие не допускается ошибка
Я сделал модуль с именем Gallery, который отлично работает на моем локальном хосте с версией 2.0.3, но при использовании версии 2.1.0 на удаленном сайте я не могу отправить форму и получаю ошибку:
Запрошенное вами действие не разрешено.
Почему это?
11 ответов
Это ошибка Codeigniter, связанная с защитой CSRF. Вы можете отменить это в cms/config/config.php
Я согласен с @Jhourlad Estrella в устранении проблем вместо отключения функции безопасности, однако мне кажется, что настоящая проблема заключается в скрытом поле ввода, содержащем токен.
Вместо использования простого HTML для создания элемента формы используйте form_open()
а также form_close()
вспомогательные функции. Причина в том, что когда вы используете вспомогательную функцию, она автоматически вставляет маркер csrf в качестве скрытого поля в форме.
Вы также можете сделать это вручную, добавив токен в качестве скрытого поля ввода в форме.
<input type="hidden" name="csrf_hash_name" value="your-hash-value-here">
Это позволит вам оставаться защищенным от CSRF-атак и решить вашу проблему.
Надеюсь, что это поможет кому-то еще, так как это сводило меня с ума в первый раз, когда я понял это.
В вопросах программирования вы не обходите проблемы, вы их исправляете. Я хочу сказать, что эта функция не будет здесь, если она непригодна для использования: потому что это так, и она работает для меня. У вас просто есть проблема с реализацией.
Мой ответ: Удалите все тире, точки и любые другие не алфавитно-цифровые символы из значений следующих записей в 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, связанных с тем, над чем вы работаете, просто чтобы убедиться, что это безопасно.
В любом случае, я надеюсь, что это поможет кому-то там, хотя мой ответ опоздал более чем на год.
У меня есть форма, которая была построена за пределами CI (в Joomla), но я хотел обработать с помощью CI. Мое исправление состояло в том, чтобы выборочно отключить csrf для конкретных рефералов. Я добавил это в config, сразу после параметров конфигурации по умолчанию для 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 для определенных URL-адресов в массиве $csrf_off, но оставляет его нетронутым для всех других запросов.
Я нашел с помощью формы вспомогательные функции
пример
<?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();?>
Поэтому я рекомендую сейчас использовать все вспомогательные функции формы.
Эта ошибка вызывается функцией csrf_show_error() в system/core/Security.php
когда токен CSRF в $_COOKIE не совпадает с вашим $_POST['csrf_token_name'].
внутри config.php
Я должен был убедиться, что $config['cookie_domain']
соответствие $config['base_url']
без протокола (т.е. http(s)://
).
В противном случае файл cookie не был передан, что означало, что совпадение невозможно.
Это старый вопрос, но эта та же самая проблема стоила мне так много времени, что я хотел поделиться тем, что проблема была в моем случае. Это может кому-то помочь.
Я использую Codeigniter 3.0.6 и CommunityAuth 3 вместе с ним, и я получаю эту ошибку после входа в систему.
Это сбивало с толку, так как проблема иногда возникала, а не в другие времена.
Мой 'base_url' в config.php CI был настроен на что-то вроде 'www.mysite.com'
Когда вы просматриваете сайт с помощью "mysite.com" (обратите внимание, что "www" отсутствует в адресе) и вы отправляете форму, которая использует настройку "base_url" CI, как это делает логин CommunityAuth, проверка CSRF завершается неудачно, и вы получаете "The Запрошенное вами действие не разрешено. ошибка.
Используйте средство открытия формы codeigniter как это:
<php echo form_open(url,method,attributes);?>
см. документацию формы codeigniter для получения дополнительной информации.
Вероятно, это редкий случай, но я не видел своей проблемы, так как на моем сервере много разных доменных имен, которые очень похожи. Проблема заключалась в том, что я приземлился в домене, который был абсолютно неправильным, но, поскольку "Запрошенное вами действие не разрешено". ошибка имеет приоритет над ошибкой " 404 Not Found". Моя проблема заключалась в том, что я не изменил свой base_url на правильный домен. Поэтому, если ни одно из вышеперечисленных решений не работает для вас, вы можете проверить свои настройки для $config['base_url'] в application/config.
Для меня проблема заключалась в том, что я загружал представление в индекс, а затем изменил его, и это сработало:
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');
}
Я использую Codeigniter 3 та же проблема с
Запрошенное вами действие не разрешено.
Исходя из соображений Исаака Пака, я изменил свой base_url на то, что обычно вводил в адресной строке. как это...
вместо того, чтобы положить
http://www.domain.org
я пишу это так...
http://domain.org
так как мой base_url()
просто..
$config['base_url'] = 'http://domain.org/';
исправление работает для моего сайта...