【问题标题】:phpMyAdmin 4.6.2 token mismatchphpMyAdmin 4.6.2 令牌不匹配
【发布时间】:2016-10-07 12:56:19
【问题描述】:

我的 phpMyAdmin 出现了可怕的“令牌不匹配”错误。我的安装存在于一个 vagrant/ansible 盒子中,所以它是一个干净的系统。

如果我将 auth_type 设置为“cookie”,我只会停留在登录页面上,如果我将其设置为“http”,则会收到“令牌不匹配”错误。

phpMyAdmin config.inc.php

$cfg['blowfish_secret'] = '123'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! 
$i = 0;
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'http'; // or cookie
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;

Nginx 配置:

server
  {
  listen 80 default;
  server_name dev.company.local _;

  root /var/www/sites/dev.company.local;

  access_log /var/log/nginx/dev.company.local-access.log combined;
  error_log /var/log/nginx/dev.company.local-error.log notice;
  index index.html index.php;

  include fastcgi_portal.conf;

  location /phpmyadmin/(.*) {
        alias /usr/share/phpMyAdmin;
  }

  }

我不会在这里发布我的 php.ini,因为它是一个很大的文件,但配置的选项很少。

我已经检查过的内容:

  • session.gc_maxlifetime = 1440
  • session.save_path = /var/lib/php/session(设置为777,也试过/tmp
  • mcrypt 已启用
  • 清除浏览器 cookie 等
  • 验证了我的 mysql 凭据
  • 设置正确的时间+虚拟机时区

我发现了像 https://sourceforge.net/p/phpmyadmin/bugs/3893/ 这样的错误报告,但对我来说它似乎没有得到修复:)

其他信息:

  • CentOS release 6.7 (Final)
  • nginx version: nginx/1.0.15
  • PHP 5.6.22 (fpm-fcgi) (built: May 26 2016 15:45:15)

我已经尝试过当前的phpMyAdmin版本(4.6.2),以前的版本(4.6.1)和长期版本(4.4.15.6)都一样。

任何帮助都会很棒!

【问题讨论】:

  • PHP/webserver 日志中是否有任何错误?
  • @MichalČihař 不,php-fpm 和 nginx 错误日志中都没有
  • 浏览器是否接受来自 phpMyAdmin 的 cookie?再次阅读描述,这似乎是问题所在 - cookie 身份验证无法存储凭据,但使用 http 身份验证会导致令牌不匹配,因为 CSRF 令牌存储在 cookie 中......
  • @MichalČihař 据我所知,浏览器正在接受 cookie。我没有将它设置为拒绝,它也发生在 Chrome 以外的其他浏览器中
  • 过去我们在计算cookie路径时遇到了一些问题,但AFAIR是在Windows上,但请检查它是否设置正确...

标签: php mysql cookies nginx phpmyadmin


【解决方案1】:

假设你在 Vagrant 中使用 Docker,那么它很可能是由 https://github.com/phpmyadmin/docker/issues/32 引起的。

它可以通过简单地拉取更新版本的容器来修复:-)。

【讨论】:

  • 不,这是一个我用一些 ansible 脚本配置的 vagrant box。 (对于 phpmyadmin 部分,它只是获取 zip 并提取它)
【解决方案2】:

在对我的 Apache 进行安全加固后,我遇到了与您描述的完全相同的问题。 在我的情况下,结果是以下破坏了 phpMyAdmin:

Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure

将其注释掉并重新启动 httpd 后一切正常。

据说上述标头设置是为了缓解大多数常见的跨站点脚本攻击,在 cookie 中使用 HttpOnly 和 Secure 标志,但看起来 PMA 开发人员尚未充分考虑这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-23
    • 2014-09-02
    • 2013-12-25
    • 2013-08-07
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    相关资源
    最近更新 更多