我做了一个名为库模块,它在我的本地正常工作与2.0.3版本,但在远程站点上使用2.1.0版本的时候,我不能提交表单,我得到的错误:
您刚才的请求是不允许的。
为什么是这样?
我做了一个名为库模块,它在我的本地正常工作与2.0.3版本,但在远程站点上使用2.1.0版本的时候,我不能提交表单,我得到的错误:
您刚才的请求是不允许的。
为什么是这样?
这是关系到CSRF保护笨错误。 你可以取消它cms/config/config.php
我@Jhourlad埃斯特雷亚同意固定问题,而不是禁用安全功能,但是我觉得,真正的问题是与持有令牌的隐藏输入字段。
而不是使用普通的HTML创建一个形式元件使用的form_open()
和form_close()
的辅助函数。 究其原因,就是因为当你使用辅助功能,它会自动将CSRF令牌作为形式的隐藏字段。
您可以通过形式加入令牌作为一个隐藏的输入字段手动执行此操作,以及
<input type="hidden" name="csrf_hash_name" value="your-hash-value-here">
这样做,这样可以让你留免受CSRF攻击,并解决您所遇到的问题。
希望这可以帮助别人那里,因为这是我发疯首次搞清楚了这一点。
关于编程的问题,你不绕去的问题,你解决它。 我的意思是说,此功能将不会在这里,如果它是不可用的:“怎么是,它为我工作。 你只需要在执行的问题。
我的回答:删除所有破折号,句号,并从以下应用/配置/ 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"
顺便说一句,有时破折号工作,但命名的配置值时,只要有可能,我建议用简单的词。 除非你有足够的时间和技能学习笨的有关什么都你工作只是为了确保它的安全,这样做的核心文件。
不管怎么说,我希望这有助于有人在那里,即使我的答案是晚了一年多。
我有一个内置CI之外(在的Joomla)形式,但我想与CI处理。 我的修复是有选择地针对特定的引荐禁用CSRF。 我将此添加到配置,之后直接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_off阵列中的特定网址CSRF保护,但它留下完整的所有其他请求。
这是一个老问题,但同样的问题也花了我那么多的时间,我想和大家分享的问题是在我的情况是什么。 它可以帮助别人。
我使用笨3.0.6和CommunityAuth 3连同它,我登录后收到此错误。
它混淆了,因为这个问题有时会发生,不会其他时间。
我在CI的config.php文件“BASE_URL”设置为类似“www.mysite.com”
当您浏览的网站与“mysite.com”(通知“WWW”是不是在地址),你做一个使用CI的“BASE_URL”设置表单提交,就像CommunityAuth的登录的话,那么CSRF检查失败,你会得到“的您请求的操作是不允许的。” 错误。
此错误是由在函数csrf_show_error()抛出system/core/Security.php
当$ _COOKIE的CSRF令牌不匹配$ _ POST [“csrf_token_name”]。
里面config.php
,我必须确保$config['cookie_domain']
匹配$config['base_url']
没有协议(如http(s)://
)。
否则,该cookie没有被通过,这意味着比赛不能进行。
我已经使用表单辅助函数发现
例
<?php echo form_open('controller/function');?>
<?php echo form_input('username', 'Username');?>
<?php echo form_close();?>
使用辅助功能像上面应停止CSRF错误消息展示。
如果我不使用回声form_input()如果我把重载时只是正常的输入将触发CSRF错误。
<?php echo form_open('controller/function');?>
<input type="text" name="username" />
<?php echo form_close();?>
因此,我建议现在使用的所有形式的辅助功能。
使用笨形式揭幕战这样的:
<php echo form_open(url,method,attributes);?>
看到笨表格文档获得更多。
这可能是一个罕见的情况,但我没有看到我的问题,因为我的服务器有非常相似许多不同的域名。 问题是,我是在降落,这是完全错误的域名,但因为“您所请求的操作是不允许的。” 错误的优先级高于“404未找到错误”我无法看到它。 我的问题是,我没有我的BASE_URL更改为正确的域名。 所以,如果没有以上的解决方案为你工作,你可能会检查您的设置为$配置[“BASE_URL”在应用/配置。
对我来说,问题是,我是装在索引视图,比我改变为如下,它的工作:
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');
}
即时通讯使用笨3同样的问题
您刚才的请求是不允许的。
根据艾萨克·朴的角度来看,我改变了我的BASE_URL什么,我usally在地址栏中键入。 像这样...
而不是把
http://www.domain.org
我把它写这样..
http://domain.org
因为我的base_url()
仅仅是..
$config['base_url'] = 'http://domain.org/';
该修补程序适用于我的网站...