上个月渗透测试团队丢给我一份报告,网络里面写着我们OA系统存在三个高危漏洞,安全其中一个能直接拖库。漏洞当时我盯着屏幕上的整改“SQL注入”几个字,后背发凉——这套系统用了五年,情况平时跑得挺欢,报告谁也没想到它像个筛子。网络
整改从第二天就开始了。安全最先处理的漏洞是那个注入点,在登录框的整改参数传递上,开发同事加了参数化查询,情况又顺手把错误提示信息全改成统一的报告“系统繁忙”。我特意试了试,网络输入`' or 安全'1'='1`,页面只是漏洞礼貌地拒绝,不再像以前那样把数据库报错原样吐出来。这一步花了两天,测试组反复测了三十多组恶意载荷,才敢说堵住了。
第二个漏洞是文件上传功能没限制类型。这问题更阴险,攻击者能传个webshell上来。我们直接改了白名单策略,只允许jpg、png、pdf,而且强制重命名文件名,上传目录的脚本执行权限也关了。有个细节挺有意思——改完后,行政部同事抱怨扫描件传不上去了,因为扫描仪默认生成tif格式。你看,安全整改从来不是技术单方面的事,还得跟实际工作流磨合。后来把tif加进白名单,又给上传组件加了文件头校验,才算平衡了安全与便利。
最折腾的是第三个漏洞,session超时时间设得太长,理论上有人用完电脑不锁屏,别人能直接接着操作。这问题看着小,但涉及所有登录用户。技术方案简单,把超时从两小时改成十五分钟,可上线第二天就有人工单投诉“写着写着就被踢下线”。后来改成“十五分钟无操作锁定,但保留会话,重新输密码即可恢复”,投诉才消停。安全措施要是太硬,用户就会想办法绕开,比如把浏览器自动保存密码开着——那等于白改。
整个整改周期用了三周,比预期多了一周。多出来的时间主要花在漏洞复查和回归测试上。我们请第三方又扫了一遍,确认没有遗漏,才敢把报告状态改成“已修复”。但说实话,我心里清楚,漏洞这东西就像墙上的裂缝,补好这三条,可能还有头发丝细的裂纹没被发现。所以现在团队立了个规矩:每季度做一次轻量级渗透测试,而不是等着年底一次性“惊喜”。
这次整改让我最深的体会是,安全漏洞的修复不是打补丁,而是改习惯。开发的时候多写一行参数校验,运维部署时少开一个端口,比事后补救省事得多。系统上线前的安全评审以前总被当成走流程,现在没人敢敷衍了——毕竟谁也不想再经历一次半夜爬起来看日志的日子。