У меня есть форма, использующая скобки для кодировки
echo form_open('signup'); echo form_close();
и когда я отправлю его, я получаю следующую ошибку
An Error Was Encountered The action you have requested is not allowed.
НЕ always
но часто …
даже если скрытое входное поле существует внутри формы:
<div style="display:none"> <input type="hidden" value="token name is here" name="csrf_token_name"> </div>
это также происходит в аналогичной форме (signin)
EDIT: html, сгенерированный через форму
<form accept-charset="utf-8" method="post" action="http://www.example.com/signup"> <div style="display:none"> <input type="hidden" value="93565fb5855d31af3d46bd655b11a4a6" name="csrf_token_name"> </div> <input id="username" type="text" placeholder="Username" maxlength="20" value="" name="username"> <input id="email" type="text" placeholder="Email" value="" name="email"> <input id="password" type="password" placeholder="Password" value="" name="password"> <input id="submit" type="submit" value="Sign up" name="submit"> </form>
Ты делаешь это неправильно.
попробуй это
<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash();?>" />
значение должно быть таким, которое вычисляет codeigniter для токена csrf.
или использовать хелпер формы и codeigniter, автоматически добавит это скрытое поле.
В моем случае я просто увеличил переменную «csrf_expire» – количество секунд, в течение которых токен должен истечь.
Из $ config ['csrf_expire'] = 7200; В $ config ['csrf_expire'] = 28800;
изменить $ config ['csrf_regenerate'] = TRUE;
в
$ config ['csrf_regenerate'] = FALSE; в файле конфигурации
Если вы просто хотите полностью избавиться от ошибок …
Самое легкое решение, чтобы обойти их:
Откройте файл / config / config.php
Найдите следующую строку:
$config['csrf_protection'] = TRUE;
Замените его …
$config['csrf_protection'] = FALSE;
Сохранить изменения.
ПРЕДУПРЕЖДЕНИЕ. Отключение средства защиты CSRF означает, что вы остаетесь открытым для атак CSRF.