【问题标题】:How do I get Codeigniter CSRF protection to work properly with SSL?如何让 Codeigniter CSRF 保护与 SSL 一起正常工作?
【发布时间】:2012-07-23 01:17:23
【问题描述】:

我打开了 CI CSRF 保护,它可以正常使用 http。一旦我打开 https(通过将站点的基本 URL 更改为 https 并将所有流量从 http 重定向到 https),我开始看到:

csrf token is missing on request

日志中的错误。 Codeigniter 在两种情况下报告此错误:

1) csrf 令牌不在 POST 请求中 2) csrf token cookie 未设置或已过期。

我们所有的 post 请求(主要是 AJAX)都有一个 csrf 令牌,因为我们的自定义 ajax 函数默认包含它,所以我认为它必须是 #2。此外,我在配置中选择了安全和非安全 cookie 设置,在这两种情况下都会出现此错误。

我的猜测是 csrf 令牌 cookie 未设置或未加密。我的主要问题是我无法在自己的系统(Ubuntu 上的 Chrome)上进行复制,但是一旦我投入生产,我就看到日志立即爆发。

关于我做错了什么甚至如何调试这种情况的任何想法?谢谢!

会话和 Cookie 配置:

$config['sess_cookie_name']        = 'session';
$config['sess_expiration']         = 1209600;
$config['sess_expire_on_close']    = FALSE;
$config['sess_encrypt_cookie']     = FALSE;
$config['sess_use_database']       = FALSE;
$config['sess_table_name']         = 'ci_sessions';
$config['sess_match_ip']           = FALSE;
$config['sess_match_useragent']    = TRUE;
$config['sess_time_to_update']     = 300;


$config['cookie_prefix']    = "my";
$config['cookie_domain']    = "";
$config['cookie_path']      = "/";
$config['cookie_secure']    = myconfig('use_https'); //this is true when https 
//is forced, false otherwise

【问题讨论】:

  • 您对所有内容都使用自动重定向吗?链接是否仍在使用http://,但您依靠重定向将它们变成https://
  • 不,一旦我更改了基本 url,网站上的所有链接都会变成 https。重定向仅发生在初始(非 https)请求上。之后js中的所有链接和端点都指向https
  • 你不需要做任何“任何事情”来使 CSRF 与 SSL 一起工作 - 问题必须在其他地方。我怀疑是您的会话或 cookie 导致了问题。请发布您所有的会话 + cookie 配置。
  • 我怀疑这可能与 csrf cookie 未加密(或未设置)有关...

标签: php codeigniter csrf ssl


【解决方案1】:

可能是用户正在访问https://example.com,但请求正在POST 到https://www.example.com(反之亦然)。尝试 a) 将 cookie_domain 设置为“.example.com”;或 b) 创建一个 .htaccess 规则,将所有对 https://example.com 的请求重定向到 https://www.example.com

【讨论】:

    【解决方案2】:

    我将在这里随机回答,因为您提到了 AJAX 调用。我在 CI CSRF 保护中遇到的问题:

    http://blog.biernacki.ca/2011/12/enabling-csrf-protection-in-codeigniter-for-ajax-calls/

    因为 SSL 与您的 CSRF 工作无关。我什至根本不会认为是这样。您正在查看对非 HTTPS 端口的静态调用,或者在 ajax 调用时未将令牌传递给 CSRF。

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      相关资源
      最近更新 更多