乐趣区

关于管理后台:☘-gMIS吉密斯升级多IPRoaming漫游改进和Cache缓存优化

“实现大事业的惟一办法,但从基本上一步一步、一点一点地做起,这是行为学所器重的一个事实。”
—- 米塞斯 Mises《人的行为 Human Action》,https://ufqi.com/news/ulongpa… 

 gMIS 吉密斯 作为治理后盾系统软件,始终默默工作在后端,鲜有出头露面的机会。其实 gMIS 也在一直的优化改良,间隔上次:☘ gMIS 吉密斯降级:点选 Pickup2.0 和平安及权限零碎等,曾经差不多快一年没更新 gMIS Blog,趁着最近一次版本的更新,记录如下,以资参考备查。

1. 单用户多 IP-Roaming 漫游平安鉴权改良

网络的飞速发展使得,单网络同时用户领有和应用多个 IP 成为可能,比方咱们在去年就针对同一个用户同时具备 IPv4 和 IPv6 两个地址的状况进行了优化改良:gMIS 吉米斯降级反对 IPv4/IPv6 双栈网络模式。
此外,挪动设施的改良和挪动带宽的晋升,使得挪动办公——就是在前进中——成为可能,而同一个用户可能在一个很短的工夫内从地点 A 挪动到地点 B,在通信层就是用户漫游过多个基站,所以其 IP 也会变化多端。

也就是说位移动态单用户可能有多个 IP,而位移进行中的用户更有可能是多个 IP,再而三的多 IP 多通道并发通信也日渐成熟——一次下层的 HTTP 申请,可能其中的 Packets 别离由不同的 IP“同时”传送而来的。这在应用层或感知不到,但也要在将来思考到这种状况。

回到这个单用户多 IP 漫游的状况,如果持续应用此前的策略,将用户从零碎登录状态弹出而后请用户再登录一次,从而造成新 IP 下的鉴权,显然是不适合的。有没有更好的方法来实现既能保障平安,也同时升高因为多 IP 变动引起的频繁登录?
梳理一下面临的新状况:
1)  一个用户单地点可能同时有多个 IP,如 IPv4、IPv6
2)  一个用户挪动中可能拜访多个基站,会经验多个 IP,这些基站 IP 可能同时也有 IPv4 和 IPv6.
综上,一个已登录的用户,在单一个回话期间,其 IP 变更将是大概率事件。

然而作为网络安全防备的次要利器之一 IP 在用户鉴权方面短期内看,又是不可或缺的。或者将 SID 视为 Token 来解决将是一个新思路。每一次胜利鉴权之后,将已受权的 SID 赋予 Token 的含意,在后续行为中如果持有一个非法的 TOken 则视为非法的拜访,作为鉴权 IP 失败后的补救措施。

借助于服务器端的缓存机制,咱们设计到一种新办法,基于此能够实现在单用户多 IP 或者多 IP 漫游的状况下,使得用户能免于从新登录。该办法的思路是:
1) 维持现有登录机制不变,
2) 当用户登录胜利后,在服务器端缓存用户下次鉴权的 SID 值,
3) 当下次用户进行拜访时,如果 IP 没有产生扭转,则应用此前的鉴权获得成功,持续,
4) 此时,如果用户切换(IPv4/IPv6) 或者漫游到新 IP 时,读取在服务端的缓存 SID,如果是非法无效的,则视为已鉴权的用户,持续,
5) 如果应用 IP 未鉴权胜利,也未检测到 SID 为非法的,则视为非法,拒绝请求并跳转到登录页面。

这个策略能够视为对去年 IPv4/IPv6 双栈网络模式的扩大和降级,无论后续单用户再切换多少 IP,如果其持有一个经非法鉴权的 SID,则能够在该 SID 有效期内(数分钟、数小时或者至少一天)继续应用零碎服务。

如此以来,则能够持续欢快地的游玩了。这一降级改良次要波及到内容有:
1) class/user.class 中减少 setSidToken / getSidToken 两个办法,
2) 改良 extra/signupin: 登录胜利后,调用 $user->setSidToken,将已受权 SID 缓存起来,
3) 改良 user->getUserBySession: 在拜访鉴权的时候,减少对现有 SID 的读取,通过 $user->getSidTOken 读取.

等等,这里如同又埋下了隐患,原本一把钥匙(SID)开一个门(IP),当初是一把钥匙能开很多门了,这是万能钥匙🔑吗?如果中间人攻打,取得一个已受权的 SID,在别处也能够自在的应用,这显然与最早的 SID 平安机制设计有抵触的中央。
有鉴于此,咱们将这个繁多 SID 容许多 IP 的性能设置为可选项,仅在对安全性要求不高的场景下应用,或者在绝对隔离的。

4) 批改 inc/config: 减少 Single_Sid_Allow_Multiple_IP 的开关,如果是 true 则启用上述性能,如果 false 则不容许。默认是 false.
$conf[‘single_sid_multiple_ip’] = true; # lower security higher convenience if true, vice versa. 13:12 2021-03-23

从实质上说,平安与便当有很多时候须要做取舍,而技术的提高则使得两者更好地均衡。

2. Cache 优化改良键值 Key 的设置

gMIS 默认配置的缓存服务是 -Memcached, 只管 Memcached 对 Key 的命名和取值给了很大的空间(250Bytes)和很少的限度(除空格和一些控制字符外),咱们在理论应用中,依然不会真的设定一个 key 为 100 字节的取值。
为了不便操作,通常咱们认为对原始的 raw string,取 Md5 摘要信息,这样既防止了太长,也防止了包含危险非法字符的可能。目前的写法是这样的:
return strlen($k)>32 ? md5($k) : $k;

这么写是有肯定情理的,通常咱们为一个缓存的 Key 命名时,并不会超过 32 个字节,这样的话,等于是人为的加长了 Key 值。感性一些,咱们不应该对小于 32 的 Key 进行加长,所以才有了这样的设计:只对超过 32 字节的 Key 做摘要解决。
然而,理论查究起来,这里仿佛也有个隐患,就是 Key 值如果应用 raw string 的话,可能会有危险的非法字符,这可怎么好?

很快,咱们在 GWA2 Java(https://ufqi.com/dev/gwa2/)的源代码中找到答案。在 GWA2 Java 的 Memcached 的缓存实现中,预留了 isSanitizeKeys 的开关,如果将 isSanitizeKeys=true, 则会对 Keys 进行平安地封装,从而防止了潜在的危险字符。
这一封装是基于输入平安纯字符串的 Base62x(https://ufqi.com/dev/base62x/)而实现的。

改良的实现办法如下:
if(strlen($k) > self::Max_Plain_Key_Length){
$k = md5($k);
}
else{
if($this->sanitizeKeys){
$k = Base62x::encode($k);
}
}

这样就满足了当 raw string key 太长而大于 32 字节时,加以 md5 音讯摘要解决,使之输入转换为不大于 32 字节的 Key;如果 raw string key 小于 32 字节时,为平安起见,应用 Base62x 打消危险的非法字符,使之输入的小于 32 字节的纯字符串。

顺便的,也更新了 GWA2 PHP 版本的 Memcached 的实现。减少应用 Base62x 加固对小于 32 字节的 raw string key 的平安解决。

3. 其余

改良了 comm/header 中对获取 User Id 的程序逻辑。

优化 inc/WebApp 外围程序中的 setBy 和 rmBy 办法,向前兼容,加强对 Cache 的反对。

优化 inc/Config 中对 Cache Host 设置的阐明,如果要在 Java、PHP 等多个利用见共享 Cache,须要用 IP 地址,而不是 .sock。

其余一些细节调整。


-gMIS (general Management Information System,吉密斯) 是一种基于 -GWA2 (General Web Application Architecture,吉娃兔) 的通用管理信息系统应用软件,具备可配置的输出和输入接口、开箱即用等特色。

能够在 gMIS 吉米斯 上构建各种治理信息利用系统软件,例如:
内容管理系统(CMS), 客户资源管理 (CRM), 企业资源打算治理(ERP),
办公自动化零碎(OA)等,
也能够是各种行业利用治理系统软件,例如:
人力资源管理系统(HR),学生治理,档案管理,游览治理,图书治理,
商品治理及业务经营撑持零碎(BOSS)等等。
gMIS 吉米斯 可能实现零代码开发、数分钟内疾速搭建各种管理信息系统(MIS, Management Information System).

-gMIS is a -GWA2 based Management Information System (MIS) software with characteristics like configurable input and output interfaces, open-box-to-use.
Various management application software systems can be built on it, such as
Content Management System (CMS), Customer Resource Management (CRM), Enterprise Resource Planning Management (ERP),
Office automation systems (OA), as well as different industry application management system softwares, such as
Human Resource Management System (HR), Student Management, Archive Management, Tourism Management, Book Management,
Commodity management and business operations support systems (BOSS), etc.
With zero code development, -gMIS can build a set of management information systems (MIS) software in a few minutes.

Lower Costs, Better Productivity.
降低成本,
提高效率.

http://ufqi.com/blog/gmis-ip-roaming-and-cache/ 

-R/12Sh

退出移动版