Mediawiki登录已取消,以防止会话劫持 - php

我刚刚在AS400 IBM i机器上设置了MediaWiki 1.29.0页面。我正在使用MariaDB作为数据库。我正在使用PHP 5.5.37

每次尝试登录帐户时,都会收到错误消息:

您的登录会话似乎有问题;为了防止会话劫持,该操作已被取消。返回上一页,重新加载该页面,然后重试。

显然,我要寻找的行为是登录。

我试过了:

$wgMainCacheType$wgSessionCacheType更改为CACHE_NONECACHE_ACCELCACHE_DBCACHE_ANYTHING的各种排列。
creating a tmp directory并设置其权限。
重建我的LocalSettings.php文件。
在php.ini中设置session.referer_check=off

我已经检查过,并且知道我的Cookie已启用(我可以调用document.cookie;并取回数据)。

在here之前已问过此问题,并且在其中存在链接的问题,但没有解决方案可以解决我的问题。他们还处理较旧版本的WikiMedia,尽管我不知道在这种情况下是否有所作为。

编辑:当我尝试创建一个新帐户时,我也得到相同的行为。但是,我能够导航Wiki,创建页面和编辑页面,而没有任何类型的错误。

这是我的请求标头:

Cache-Control: private, must-revalidate, max-age=0
Connection: close
Content-language: en
Content-Type: text/html; charset=UTF-8
Date: Thu, 10 Aug 2017 13:48:36 GMT
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Link: </<path>/resources/assets/logo.png?88d75>;rel=preload;as=image
Server: Apache
Set-Cookie: ZDEDebuggerPresent=php,phtml,php3; path=/
Set-Cookie: <wikiname>_session=n7gs0ct99ck5i2juq0togto9q7bfou6u; path=/; secure; httponly
Transfer-Encoding: chunked
Vary: Accept-Encoding,Cookie
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-Powered-By: PHP/5.5.37 ZendServer/8.5.5
X-UA-Compatible: IE=Edge

这是我的响应标头:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Cookie:ZDEDebuggerPresent=php,phtml,php3
Host:tdidev:10080
Referer:http://<wikiepath>/index.php?title=Special:UserLogin&retirnto=Main+Page
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36

参考方案

我终于找到问题所在了。默认情况下,MediaWiki传递设置了安全标志的<wikiname>_session cookie。取自OWASP:

安全标志是一个选项,可由应用程序服务器在HTTP响应内向用户发送新cookie时设置。安全标志的目的是防止由于以明文形式发送cookie导致未经授权的第三方查看cookie。
为了实现此目标,支持安全标志的浏览器将仅在请求进入HTTPS页面时发送带有安全标志的cookie。换句话说,浏览器将不会通过未加密的HTTP请求发送带有安全标志的cookie。

因此,我的MediaWiki安装正确创建并缓存了会话令牌,甚至仍然将其传递给响应标头。但是,由于我的浏览器看到的是http而不是https,因此这与令牌获取的范围有关。 Set-Cookie行将被忽略。
php.ini中有一个名为session.cookie_secure的设置,但MediaWiki会忽略此标志。
相反,解决方案是将此行添加到我的localSettings.php文件的底部:
$wgCookieSecure = false;

php session header()重定向后丢失 - php

这是我第一次尝试创建会话。另外,成功登录后,我使用header()函数重定向页面,但是在重定向的页面上,我不再有会话。有代码:建立工作阶段:function userLogin($user){ session_start(); $_SESSION['username'] = $user; header("Location: /~…

PHP Memcached会话突然失效 - php

session.save_handler = memcached session.save_path = "127.0.0.1:11211" session.gc_maxlifetime = 86400 其余的标准。我希望自上次用户访问该页面以来,该会话至少可以保留86400秒,即,如果我在5分钟后启动了一个会话并访问了该页面,则该会话应…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…

PHP:将字符串拆分为字母和数字部分的最佳方法 - php

我有几个格式的字符串AA11 AAAAAA1111111 AA1111111 分离字符串的字母和数字部分的最佳方法(最有效)? 参考方案 如果它们都是一系列字母,然后是一系列数字,并且没有非字母数字字符,那么sscanf()可能比regexp更有效$example = 'AAA11111'; list($alpha,$numeric) =…