Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 已取消Mediawiki登录以防止会话劫持_Php_Session_Mediawiki - Fatal编程技术网

Php 已取消Mediawiki登录以防止会话劫持

Php 已取消Mediawiki登录以防止会话劫持,php,session,mediawiki,Php,Session,Mediawiki,我刚刚在AS400 IBMi机器上设置了MediaWiki 1.29.0页面。我使用MariaDB作为数据库。我使用的是PHP5.5.37 每次我尝试登录帐户时,都会出现以下错误: 您的登录会话似乎有问题;为了防止会话劫持,此操作已被取消。返回上一页,重新加载该页,然后重试 显然,我正在寻找的行为是登录 我试过: 将$wgMainCacheType和$wgSessionCacheType更改为CACHE\u NONE、CACHE\u ACCEL、CACHE\u DB和CACHE\u ANYTH

我刚刚在AS400 IBMi机器上设置了MediaWiki 1.29.0页面。我使用MariaDB作为数据库。我使用的是PHP5.5.37

每次我尝试登录帐户时,都会出现以下错误:

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

显然,我正在寻找的行为是登录

我试过:

  • $wgMainCacheType
    $wgSessionCacheType
    更改为
    CACHE\u NONE
    CACHE\u ACCEL
    CACHE\u DB
    CACHE\u ANYTHING
    的各种排列
  • 以及设置其权限
  • 重建我的
    LocalSettings.php
    文件
  • 在php.ini中设置session.referer\u check=off
我已经检查过了,我知道我的cookie已启用(我可以调用
document.cookie;
并取回数据)

以前有人问过这个问题,其中有相关的问题,但没有解决方案解决了我的问题。他们还处理旧版本的维基媒体,尽管我不知道这是否会对这个例子产生影响

编辑:当我尝试创建一个新帐户时,我也会得到相同的行为。但是,我能够在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
缓存控制:私有,必须重新验证,最大年龄=0
连接:关闭
内容语言:英语
内容类型:text/html;字符集=UTF-8
日期:2017年8月10日星期四13:48:36 GMT
到期时间:1970年1月1日星期四格林威治标准时间00:00:00
链接:;rel=预载;as=图像
服务器:Apache
设置Cookie:ZDEDebuggerPresent=php、phtml、php3;路径=/
设置Cookie:_session=n7gs0ct99ck5i2juq0to9q7bfou6u;路径=/;保护httponly
传输编码:分块
改变:接受编码,Cookie
X-Content-Type-Options:nosniff
X帧选项:拒绝
X-Powered-By:PHP/5.5.37 ZendServer/8.5.5
X-UA-兼容: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
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,图像/webp,图像/apng,*/*;q=0.8
接受编码:gzip,deflate
接受语言:en-US,en;q=0.8
连接:保持活力
Cookie:ZDEDebuggerPresent=php、phtml、php3
主持人:tdidev:10080
推荐人:http:///index.php?title=Special:UserLogin&retirnto=Main+页面
升级不安全的请求:1
用户代理:Mozilla/5.0(Windows NT 6.1;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/60.0.3112.101 Safari/537.36

当sessionId被无序更新时,我在另一个应用程序上遇到了类似的情况

因此,通常您请求一个登录表单,它会创建一个带有sessionId的会话,并将其存储在某个地方

然后您提交表单,它将表单绑定到原始会话ID中,检查您的身份验证,然后记录原始会话,或者为您创建一个新会话,并更新您的会话(通常使用您可以在网络日志中看到的HTTP
Set Cookie
命令)

但是您可以通过查看当前cookie中的sessionId和表单上的任何标记(以防止重播),并根据/tmp/php会话xxx文件(可能在/var/lib/php中)或存储会话的任何数据库检查它,来了解所有内容

让我对我的问题有所了解的是,当我准备提交一份带有特定sessionid的表单时,sessionid已不再有效。因此,我没有通过重播检查,我得到了一个类似于你的错误。事实证明,在我的例子中,这与数据库复制的方式不匹配,因此我可以尝试访问尚未创建的会话

查看所有代码,sessionid不匹配
wpTokenLogin
510a85
开始,但您在
SetCookie
中的wiki会话以
n7gs0c
开始,并且在您的日志中谈论
6ov933
。。。因此,假设您从不同的尝试中复制/粘贴,您需要自己从一个干净的状态运行它,并检查所有内容是否都使用相同的会话。如果没有,试着弄清楚你的会话发生了什么(如果它被创建/更改),或者为什么你没有得到正确的会话,如果它被创建但从未正确传递给你

也就是说,我只是查看了登录到我们自己内部版本的mediawiki的客户端,
wpLoginToken
wikidb_session
JSESSIONID
两者都不匹配(尽管我希望其中一个出现在wiki日志中,我也没有访问权限)


如果必须,请grep正在查找的错误消息的源,并插入
error\u日志(\uuuuuu FILE\uuuu.:'。\uuuuu LINE\uuuuuu.'''..var\u导出(debug\u backtrace(debug\u backtrace\u IGNORE\u ARGS),true)查找堆栈的备份工作,查看不匹配的内容,生成错误

我终于找到了解决我问题的办法。默认情况下,MediaWiki传递设置了安全标志的
\u会话
cookie。摘自:

安全标志是应用服务器在HTTP响应中向用户发送新cookie时可以设置的选项。安全标志的目的是防止未授权方由于以明文形式传输cookie而观察cookie

为了实现这一目标,支持安全标志的浏览器将只在请求转到HTTPS页面时发送带有安全标志的cookie。换句话说,浏览器不会在未加密的HTTP请求上发送设置了安全标志的cookie

因此,我的MediaWiki安装正确地创建和缓存了会话令牌,它甚至仍然通过响应头传递会话令牌。然而,由于我的浏览器看到的是
http
,而不是
https
,所以这就足够了