2012-04-23 4 views
2

У меня есть форма с использованием CodeIgniter скобокCodeIgniter ошибка CSRF в форме представления

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> 

это также происходит по аналогичной форме() для входа в аккаунт

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> 
+0

Пожалуйста, разместите код HTML, созданный для вашей формы. Благодарю. – fedeisas

+0

@fedeisas обновленный пост – fxuser

+0

Эта особая ошибка вызывается функцией csrf_show_error() в system/code/Security.php, когда токен CSRF в $ _COOKIE не соответствует вашему $ _POST ['csrf_token_name']. Здесь есть много вещей, которые могут вызывать проблемы: a) Вы делаете запрос AJAX, который может менять токен $ _COOKIE перед отправкой формы? б) Вы делаете междоменные запросы? Или, может быть, изменить протоколы? Если вы разместите ссылку с вашим приложением, возможно, я смогу увидеть, что происходит. – fedeisas

ответ

4

вы делаете это неправильно.

попробовать это

<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash();?>" /> 

значение должно быть то, что CodeIgniter вычисляет для маркеров CSRF.

или использовать форму helper и codeigniter автоматически добавит это скрытое поле.

+0

скрытое поле добавляется автоматически, так как я использую form_open() ... я не добавил его вручную, если это вы подумали .. – fxuser

+0

вы можете разместить код для формы? немного странно, если вы уже используете хелпер формы. – itachi

+0

sure ... check post – fxuser

-2

Если вы просто хотите, чтобы избавиться от ошибок вообще ...
простым решением, чтобы вокруг них было бы:

  1. Откройте /конфигурации/config.php файл

  2. Найдите строку ниже:
    $config['csrf_protection'] = TRUE;

  3. Замените его ...
    $config['csrf_protection'] = FALSE;

  4. Сохранить изменения.


ВНИМАНИЕ: Выключение защиты от CSRF означает, что вы оставили открытым для CSRF атак.

0

В моем случае я просто увеличил переменную «csrf_expire» - количество секунд, в течение которых токен должен истекать.

От $ config ['csrf_expire'] = 7200; До $ config ['csrf_expire'] = 28800;

-1

изменить $ config ['csrf_regenerate'] = TRUE;

к

$ конфиг [ 'csrf_regenerate'] = FALSE; в файле конфигурации

Смежные вопросы