凌晨两点,漏洞我盯着屏幕上的防护报错日志,手指悬在键盘上没落下去。开关那个被反复标记的漏洞PHP函数,像一道没上锁的防护后门——攻击者只要往URL里塞几个参数,就能把数据库当自家后院逛。开关我犹豫的漏洞不是要不要修,而是防护要不要把那个“漏洞防护开关”关掉。
这开关藏在我们自己写的开关WAF里,平时挡SQL注入和XSS,漏洞像门卫大爷一样勤恳。防护可它今天误伤了正常请求,开关把用户提交的漏洞合法内容当成攻击特征给拦了。线上投诉已经堆了十几条,防护运营同事在群里连发三个感叹号。开关我懂那种感觉——你明明知道门卫大爷眼神不好,可你不敢让他下班,因为巷子里确实有贼。
后来我做了个实验。把开关调成“记录模式”,只记日志不拦截。三天下来,日志里躺着两千多条可疑请求,真正打进来的只有七条。剩下的全是扫描器在瞎撞,像夜里往门上扔石头的醉汉,响动大,杀伤力为零。我盯着那七条真实攻击的IP,清一色来自同一个网段,连User-Agent都懒得换。那一刻我突然明白,防护开关从来不是技术问题,是信任问题——你信不信自己的判断比门卫大爷更准。
有个老前辈跟我说过,他早年管过一台没打补丁的服务器,裸奔了半年,啥事没有。后来公司合规检查,逼他开了所有防护,结果业务崩了三次,每次都是误杀。他说:“漏洞是死的,人是活的。开关拧太紧,业务会窒息;拧太松,早晚出事。你得听流量说话。”这话糙,理不糙。
现在我的习惯是,每个季度专门抽一天,把防护开关挨个拨一遍。不是全开全关,而是针对不同接口单独设阈值。登录接口严一点,多拦几次没关系;静态资源松一点,宁可漏过也不卡加载。像调音响的低音和高音,得根据房间形状来。有次我把某个上传接口的检测级别从“严格”改成“中等”,结果当月误报率降了六成,真攻击也没漏。
开关的意义不在“开”或“关”,而在你知道每个位置对应什么代价。全开是安全洁癖,全关是赌徒心态。真正值钱的,是你在日志里翻到那条被误杀的合法请求时,能认出它是个人写的,而不是机器生成的垃圾。这需要手感和耐心,跟修老钟表一个道理——齿轮咬合太紧会卡死,太松又走不准。
昨天那个报错,最后我改了三行白名单代码,把用户输入里的中文引号排除掉,开关保持原样。今天早会上,运营说投诉清零了。我没提那个开关,但心里清楚:它还在那儿,像个老伙计,偶尔犯浑,但你知道它底线在哪。漏洞永远补不完,开关永远调不完,可日子就是这么过下去的——不是靠完美配置,是靠一次次在深夜跟日志较劲时攒下的直觉。
顶: 8717踩: 45






评论专区