首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取消Mediawiki登录以防止会话劫持

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

Stack Overflow用户
提问于 2017-08-08 18:20:06
回答 3查看 1.9K关注 0票数 14

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

每当我试图登录一个帐户时,我都会得到以下错误:

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

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

我试过:

  • $wgMainCacheType$wgSessionCacheType转化为CACHE_NONECACHE_ACCELCACHE_DBCACHE_ANYTHING的各种排列。
  • 创建一个tmp目录并设置其权限。
  • 重建我的LocalSettings.php文件。
  • session.referer_check=off中设置php.ini

我已经检查过了,并且我知道我的cookie是启用的(我可以打电话给document.cookie;并获得数据)。

这个问题在这里之前就已经被问过了,并且里面有链接的问题,但是没有解决办法来解决我的问题。他们还处理较早版本的WikiMedia,但我不知道这在这种情况下是否有区别。

编辑:当我尝试创建一个新帐户时,我也得到了同样的行为。但是,我能够在wiki中导航、创建页面和编辑页面,而不会出现任何错误。

以下是我的请求标题:

代码语言:javascript
复制
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

以下是我的响应标题:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-24 13:07:55

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

票数 6
EN

Stack Overflow用户

发布于 2017-08-17 12:23:28

当sessionId被按顺序更新时,我在不同的应用程序上也发生了类似的事情。

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

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

但是您可以跟踪一切,方法是查看当前cookie中的sessionId和表单上的任何令牌(以防止重放),并对照/tmp/php-会话-xxx文件(可能在/var/lib/php中)或它存储会话的任何数据库检查它。

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

查看您的所有代码,sessionIds不匹配。wpTokenLogin510a85开始,但是SetCookie中的wiki会话从n7gs0c开始,在日志中讨论6ov933.因此,假设您是从不同的尝试中复制/粘贴的,您需要自己从一个干净的状态运行它,并检查所有的内容看起来都是在使用相同的会话。如果不是,试着找出您拥有的会话发生了什么(如果它已经创建/更改),或者为什么您没有得到正确的会话,如果它是创建的,但从未正确地传递给您。

尽管如此,我只是看看登录到我们自己内部版本的mediawiki的客户端,而wpLoginTokenwikidb_sessionJSESSIONID也不匹配(尽管我希望它们中的一个出现在wiki日志中,我也无法访问)。

如果有必要,请使用grep作为您正在查找的错误消息的源,并插入error_log(__FILE__.':'.__LINE__.' '.var_export(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), true));以查找堆栈中的工作,查看哪些内容不匹配,以生成错误。

票数 3
EN

Stack Overflow用户

发布于 2021-07-17 05:36:04

这是MediaWiki一直存在的问题,这是由于您的密码输入错误,或者MediaWiki在登录过程(数据库、cookie、磁盘文件等)中没有编写 This (数据库、cookie、磁盘文件等)。在我的例子中,我使用$wgReadOnly变量来实现wiki的只读。我发现我必须使用$wgMainCacheType = CACHE_MEMCACHED才能使我的系统正常工作。

请参阅:https://www.mediawiki.org/wiki/Manual:Memcached

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45575435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档