【发布时间】:2012-05-03 17:31:36
【问题描述】:
我有一个使用 codeigniter 括号的表单
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>
这也发生在类似的表单上(登录)
编辑:通过表单生成的 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>
【问题讨论】:
-
请发布为您的表单生成的 HTML 代码。谢谢。
-
当 $_COOKIE 中的 CSRF 令牌与您的 $_POST['csrf_token_name'] 不匹配时,system/code/Security.php 中的函数 csrf_show_error() 会抛出该特定错误。这里有很多可能导致问题的事情: a) 您是否在发送表单之前发出 AJAX 请求来更改您的 $_COOKIE 令牌? b)您是否正在发出跨域请求?或者也许改变协议?如果您发布与您的应用程序的链接,也许我可以看到发生了什么。
-
当我执行 ajax 请求时,我没有收到上述错误...这发生在此表单上,从 domain.com(表单所在的位置)将我带到 domain.com/signup 以完成注册。 ..而且这种情况真的很少见...我不是简单地从索引页面到 /signup 进行跨域请求
-
你 $config['base_url'] 有没有 www?
-
是的,它有 www...实际上是它的domain.com,如果缺少 www 部分,我也会通过 htaccess 强制...
标签: php forms codeigniter csrf csrf-protection