Bug集锦 -安全应该是全面的

写Bug集锦的目的在于分享从业这些年来遇到的这些有趣的问题,希望在读这些小故事的同时,能带给大家一些思考。

安全应该是全面的

小蔡被分配到测试工资系统,这个系统不仅公司内部会使用,而且还会有面向其他大客户的定制版。

由于工资系统的特殊性,不仅要求其在使用时的功能性,系统安全性也是一个很重要的指标。

为了让系统更安全,业务分析人员在项目初始时就为系统设计了动态短信密码和随机键盘的功能(图5.1),使得系统在用户登录时就能验证用户的身份。只有在系统内部注册过手机号,并在登录时通过手机获取动态短信密码,并使用随机键盘输入自己设定的登陆密码之后,用户才能访问工资系统。

在用户登录这部分,小蔡设计了不少安全性的测试用例,例如SQL注入等,但是都被系统防范住了。小蔡本以为安全测试做的很全面了,但是当测试功能点时,由于URL是www.xyz.com/user/123456的模式,她好奇地通过篡改URL最后的用户ID,期望系统能告知她无访问权限。可是没想到却查看到了另一个用户的信息。要知道企业内部的工号都是连续的,只要有人有耐心,这个缺陷可以让所有人的工资信息都曝光。

小蔡意识到不仅是篡改用户ID会有问题,而且系统的URL模式也可能会有更大的问题。因为普通用户的URL是www.xyz.com/user/123456,而系统管理员的URL是www.xyz.com/admin/654321,最后几位也是工号。要知道管理员是可以看所有人的工资信息的!要是有人使用www.xyz.com/admin/123456,会被认为是管理员吗?

小蔡带着这个问题进行了尝试,果真作为普通用户也被当成管理员,从而可以查看所有人的工资了。

看来系统只是在登录时作了严格的安全性检测,但是对于登录之后的用户权限,却丝毫没有考虑。

小蔡马上把这一发现通知项目经理,并确定这个缺陷为高优先级和高风险。整个开发团队在第一时间就修复了这个严重的缺陷。

好奇心没有杀死猫,反而帮助小蔡在测试中发现了一个隐藏的重大安全性缺陷。小蔡也意识到,一个系统的安全性,并不单纯来自于防范系统外部的入侵,还需要严格审视系统内部的安全性漏洞。系统内外部的安全性是一体的,需要全面的设计。

#####【扩展知识】
动态短信
随机键盘
SQL注入
OWASP Top 10
URL pattern
URL篡改