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

Lor*_*aad 12 php session mediawiki

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

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

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

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

我试过了:

  • 改变$wgMainCacheType$wgSessionCacheType对各种排列CACHE_NONE,CACHE_ACCEL,CACHE_DB,和CACHE_ANYTHING.
  • 创建tmp目录并设置其权限.
  • 重建我的LocalSettings.php文件.
  • session.referer_check=off在php.ini中设置

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

这个问题在之前已经被问到,并且内部存在相关问题,但没有解决方案解决了我的问题.他们还处理旧版本的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
Run Code Online (Sandbox Code Playgroud)

这是我的回复标题:

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
Run Code Online (Sandbox Code Playgroud)

Lor*_*aad 5

我终于找到了问题的问题.默认情况下,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;