【问题标题】:CodeIgniter CSRF and localhostCodeIgniter CSRF 和 localhost
【发布时间】:2011-08-16 02:14:42
【问题描述】:

我目前正在本地 (myhostname.local) 工作,以在 CodeIgniter 中开始一个开发项目,并尝试提交一个简单的登录表单,但 CSRF 保护不起作用。我得到了错误:

遇到错误
您请求的操作不被允许。

有几点需要注意:

  1. 我正在使用 CI Reactor 2.0.2
  2. 我正在从本地主机 (myhostname.local) 运行所有内容

我的表格:

<?=form_open('home/login');?>
... username/password fields in here ...
<?=form_close();>

我的控制器:

public function login()
{

    $this->form_validation->set_rules('email','Email','trim|required');
    $this->form_validation->set_rules('password','Password','required');

    if($this->form_validation->run() === FALSE)
    {
        ... form did not pass validation ...
    }
    else
    {
        ... form passed ...
    }

}

当我将表单提交给http://myhostname.local/home/login 时,我收到了上述错误。

非常感谢任何有关为什么会发生这种情况的帮助。

谢谢! 肖恩

【问题讨论】:

  • 这种情况是每次都发生,还是仅有时发生,还是仅在验证失败后发生?另外,你确定它只是 localhost - 这对你来说是否适用于实时服务器?
  • 每次都会发生。我还没有在实时服务器上测试过它。我会这样做并告诉你。
  • 这可能会有所帮助,特别是因为标题是“CodeIgniter CSRF and localhost”,这可能与未设置cookie有关,您可以设置和读取cookie吗?确保您在 html 源代码中也看到了 CSRF 令牌,我知道这听起来很愚蠢,但最好先检查最简单的东西。
  • 你加载表单验证库了吗?只是为了确保......
  • @Wesley Murch - 我看到了 cookie,我可以设置 cookie,但 CSRF 没有 cookie。此外,CSRF 令牌在源中。根据您的要求,我已将网站上传到实时服务器:modernstitches.seangates.com

标签: php codeigniter csrf


【解决方案1】:

似乎在 config.php 文件中为 cookie 设置值有很大的影响。 一旦我将这些设置回默认值,一切都会重新开始正常工作:

$config['cookie_prefix']    = "";
$config['cookie_domain']    = "";
$config['cookie_path']    = "/";
$config['cookie_secure']    = FALSE;

【讨论】:

  • 这是我的正确答案(MacOSX 上的 Apache 2.2.24)。但我更进一步并添加了这个 if (ENVIRONMENT==='development') $config['cookie_domain']='';就在 config.php 中的 cookie_ 部分之后,如果您部署到生产/阶段 env,它将起作用。
【解决方案2】:

我也遇到过类似的问题;我不断收到“不允许您请求的操作”。当我尝试提交登录表单时出现错误消息。我正在使用虚拟 linux 机器在本地工作。事实证明,我的问题与虚拟机上的日期时间设置有关。一旦我更新日期以匹配我的主机日期时间,问题就会消失。

我正在使用 CondeIgniter v. 2.1.0。

这是我的 config.php 文件的一部分:

$config['cookie_prefix']    = "";
$config['cookie_domain']    = "";
$config['cookie_path']      = "/";
$config['cookie_secure']    = FALSE;

$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'my_csrf_token';
$config['csrf_cookie_name'] = 'mycsrf';
$config['csrf_expire'] = 7200;

我希望此信息对遇到类似问题的人有所帮助。

【讨论】:

    【解决方案3】:

    使用 MAMP 在 localhost 设置上运行 CI 2.1.0。

    CI 的安装是全新的,没有额外的东西。只需按照用户指南中的“教程”进行操作,在创建我的第一个表单并在配置中启用 CSRF 后遇到了同样的错误。

    'form_open()' 用于打开表单。正在创建隐藏字段。 每次都会出现错误:“不允许您请求的操作”。

    按照这里的建议,在 config.php 中使用 cookie 配置选项后,我发现在我的情况下,罪魁祸首似乎是 'cookie_prefix' 配置。它必须留空,否则会导致此错误。留空后,一切正常。

    我希望这对其他人有用。

    【讨论】:

      猜你喜欢
      • 2018-04-19
      • 2016-07-14
      • 1970-01-01
      • 2017-06-14
      • 2017-07-02
      • 2011-11-22
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多