Php 提交表单时出现codeigniter csrf错误

Php 提交表单时出现codeigniter csrf错误,php,forms,codeigniter,csrf,csrf-protection,Php,Forms,Codeigniter,Csrf,Csrf Protection,我有一个使用codeigniter括号的表单 echo form_open('signup'); echo form_close(); 当我提交它时,我得到以下错误 An Error Was Encountered The action you have requested is not allowed. 不总是,但经常 即使表单中存在隐藏的inputfield: <div style="display:none"> <input type="hidden" value

我有一个使用codeigniter括号的表单

echo form_open('signup');

echo form_close();
当我提交它时,我得到以下错误

An Error Was Encountered

The action you have requested is not allowed.
总是
,但经常

即使表单中存在隐藏的inputfield:

<div style="display:none">
<input type="hidden" value="token name is here" name="csrf_token_name">
</div>

这也发生在类似的表单上(签名)

编辑:通过表单生成的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();?>" />

你做错了

试试这个

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

如果您只想彻底消除错误…
绕过它们的最简单解决方案是:

  • 打开/config/config.php文件

  • 找到下面的行:
    $config['csrf\u protection']=TRUE

  • 将其替换为…
    $config['csrf\u protection']=FALSE

  • 保存更改



  • 警告:关闭CSRF保护意味着您将面临CSRF攻击。

    如果您只是想彻底消除错误…
    绕过它们的最简单解决方案是:

  • 打开/config/config.php文件

  • 找到下面的行:
    $config['csrf\u protection']=TRUE

  • 将其替换为…
    $config['csrf\u protection']=FALSE

  • 保存更改



  • 注意:关闭CSRF保护意味着您将面临CSRF攻击。

    在我的情况下,我刚刚增加了“CSRF\u expire”变量-令牌应过期的秒数

    从$config['csrf_expire']=7200; 到 $config['csrf_expire']=28800


    在我的例子中,我只是增加了'csrf_expire'变量-令牌应该过期的秒数

    从$config['csrf_expire']=7200; 到 $config['csrf_expire']=28800


    更改$config['csrf_regenerate']=TRUE


    $config['csrf_regenerate']=FALSE;在配置文件中

    更改$config['csrf_regenate']=TRUE



    $config['csrf_regenerate']=FALSE;在配置文件

    中,由于我使用form_open(),隐藏字段会自动添加。。。如果你这么想的话,我没有手动添加。你能发布表单的代码吗?如果您已经在使用表单帮助程序,则有点奇怪。您是否正在使用htaccess删除url中的index.php?我使用默认的codeigniter htaccess刚刚对其进行了编辑,以便在url中不存在www时始终添加www…我只设置了$config['index_page']='';如果成功,则表示您的htaccess未被覆盖。我在表单操作中没有看到方法名称。Post变量是否转到signup controller中的index函数?隐藏字段是自动添加的,因为我使用了form_open()。。。如果你这么想的话,我没有手动添加。你能发布表单的代码吗?如果您已经在使用表单帮助程序,则有点奇怪。您是否正在使用htaccess删除url中的index.php?我使用默认的codeigniter htaccess刚刚对其进行了编辑,以便在url中不存在www时始终添加www…我只设置了$config['index_page']='';如果成功,则表示您的htaccess未被覆盖。我在表单操作中没有看到方法名称。Post变量是否转到注册控制器中的索引函数?请发布为表单生成的HTML代码。谢谢。当$\u COOKIE中的csrf令牌与您的$\u POST['csrf\u令牌\u名称']不匹配时,system/code/Security.php中的函数csrf\u show\u error()会引发该特定错误。这里可能会有很多问题:a)在发送表单之前,您是否发出了可能会更改$\u COOKIE令牌的AJAX请求?b) 您正在进行跨域请求吗?或者改变协议?如果你在你的应用程序上发布一个链接,也许我可以看到发生了什么。当我做ajax请求时,我不会得到上面的错误。。。这发生在这张表格上,从那里(表格所在的地方)我需要完成注册。。。而且这种情况非常罕见。。。我不是简单地从索引页到/signup进行跨域请求,而您的$config['base_url']是否有www?是的,它有www。。。事实上,它和我也通过htaccess强制访问www部分,如果缺少…请发布为您的表单生成的HTML代码。谢谢。当$\u COOKIE中的csrf令牌与您的$\u POST['csrf\u令牌\u名称']不匹配时,system/code/Security.php中的函数csrf\u show\u error()会引发该特定错误。这里可能会有很多问题:a)在发送表单之前,您是否发出了可能会更改$\u COOKIE令牌的AJAX请求?b) 您正在进行跨域请求吗?或者改变协议?如果你在你的应用程序上发布一个链接,也许我可以看到发生了什么。当我做ajax请求时,我不会得到上面的错误。。。这发生在这张表格上,从那里(表格所在的地方)我需要完成注册。。。而且这种情况非常罕见。。。我不是简单地从索引页到/signup进行跨域请求,而您的$config['base_url']是否有www?是的,它有www。。。事实上,它和我也通过htaccess强制www部分,如果丢失…为什么会建议暴露于CSRF攻击?为什么会建议暴露于CSRF攻击?你能解释一下吗?你能解释一下吗?