“实现大事业的惟一办法,但从基本上一步一步、一点一点地做起,这是行为学所器重的一个事实。”
—-米塞斯 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