微擎 Hack (1) – 启动过程

由于在开发过程中,发现有一些很不厚道的设置,让我不得不试图去修改一些微擎的 Kernel 代码,下面将探索的过程笔记一下。

>

同时也记录一下我的问题本身: 我希望重用微擎的用户系统,微擎的设计中,用户相关的库表在 ims_members 相关的表中,主键是 uid; 可以通过用户登录微擎后台,通过统一的验证使用后台的逻辑; 一个公众号只能捆绑到一个用户上面(用户指定当前公众号的时候,该公众号会指定给该用户),通过右上角的公众号切换处切换,一个用户切换上去,原来的用户就会被切换下来(这一点太蛋疼了,以至于无法做出稳定的用户 – 管理的微信号假设,问题还在后面)。 在没有设置当前公众号的情况下,很多功能会返回错误页面——请您从“管理公众号”或是从顶部“切换公众号”选择要操作的公众号! 我现在要做的事情是:要创建一些其他的系统角色用户,但是必须能够自己设置权限访问到我插件指定的 site.php 和 mobile.php 指定的模块,这些页面在这种情况下,都会显示第4点的错误信息。 那么现在我要做的就是,在 kernel 里面把这个跳过去。

>

一、哪些公众号是当前登录用户可以管理的(设置为当前)

全局搜索代码——“请切换公众号”,定位到 frame.tpl.php

发现点击下方的公众号按钮会跳转这个 url:

create_url(‘account/switch’, array(‘id’ => $account[‘weid’]));

就是这段,继续深究:

发现获取当前“可切换公众号”的逻辑在 account.mod.php 的 account_search() 方法中:

如果是根用户 $_W[‘isfounder’] = true 或者 ims_wechats 的 uid(公众号管理员)是当前登录的 uid 的时候,可以切换到该 ims_wechats.weid 指定的公众号。

>

二、“切换公众号”的动作在哪里

以上,找到 /source/controller/account/switch.ctrl.php

业务逻辑如下: 先从 $_GPC 即 get post cookie 获取 id 字段; 用这个 id 获取 ims_wechats 里面的公众号记录; 检查公众号是否存在,并且当前用户是否有权限管理这个公众号; 执行切换操作; 执行切换操作是如下几行:

cache_write(‘weid:’ . $_W[‘uid’], $row[‘weid’]); isetcookie(‘__weid’, $row[‘weid’], 7 * 46800); message($row[‘name’], ”, ‘success’);

干得好!就在这里,结论应该就是在这里: 1. 只要 $_GPC 定义了 weid,并且当前用户有权限,“当前公众户就是这个”; 2. 加载的同时还会将 __weid 写入 cookie,作为当前客户访问的 __weid; 3. 同时还会将 {key: ‘weid:{weid}’, value: uid} 写入 ims_cache 表;

>

三、ims_cache 里面的这个 weid:{weid} 干什么用的

看起来在全局的 cache 里面将公众号指定给一个用户,就已经将这个公众号绑死给一个人了,这样极是危险,起码 yy 一下就觉得只要在同一个公众号上面重复 switch 还是会把另一个人踢出去。

于是找一下 ‘weid:’ 这个关键词,看看 cache 里面这个东西是造嘛的。

只有在 cache.mysql.func.php 的 cache_read($key) 方法里面有,再查找引用。

经过几层查找,发现 cache.func.php 里面 有个 cache_load($key, $unserialize) 函数,会将 ims_cache 的键值对加载到 $_W 中。

… 好乱。。暂不深究算了。

>

四、结论及测试

只要在【一】中有权限的登录用户,在 cookie 里面 __weid 字段指定了用户是当前用户,就可以将当前公众号设置为当前公众号。

实测:在 chrome 中直接在 js console 里面运行 cookie.set(‘__weid’, 1),公众号就切换到了,另外在 firefox 里面设置另一个用户,互不影响。

于是,如果想让一个用户登录可以绑定公众号,只需要写一下 cookie 然后刷新页面即可。

或者,在 querystring 里面加入 &__weid=1,也可以突破这个限制!

但是,现在问题是,如果一个用户不具有公众号的管理权限,这一点就有难度了。

但是我实测了一下,居然是可以的!!

这下就一点问题都没有了!


【转载请附】愿以此功德,回向 >>

原文链接:https://www.huangwenchao.com.cn/2014/08/we7-hack-1.html【微擎 Hack (1) – 启动过程】

发表评论

电子邮件地址不会被公开。 必填项已用*标注