sed -i -E 's/(code=)[0-9]{6}/\1******/g' access.log
chmod 640 access.log

排查问题时打开访问日志,看到整行查询串里手机号和六位验证码都在,日志文件权限 644,同服务器上其他站点也能读。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:验证码走查询串提交,参数直接进了访问日志,调试时又加了一行打印把整个请求体写进去。日志轮转后还留了三十天。

「验证码写日志」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

处理上按这个顺序:验证码改用请求体提交,别放在地址里;日志里对手机号、验证码这类参数做掩码;清理已经写进去的日志,把权限收到 640。

确认没问题再收工,新日志里验证码显示为掩码,搜六位数字搜不到明文。

作者 9823189