上周跟一家做在线教育的创业公司聊,他们刚被扫了三次端口,后台日志里全是可疑的POST请求。CTO说:“我们买了WAF,也配了防DDoS,怎么还是被拖库?”——问题不在工具没买,而在策略没真正跑起来。
策略不是PPT,是每天在跑的流程
很多团队把“制定网络安全策略”当成季度OKR里的一个动作:开两天会、写十几页文档、走个审批流,然后存进Confluence就等于完成了。可真实情况是,新员工入职没做过权限最小化配置,测试环境直接连生产数据库,API密钥硬编码在前端JS里……这些不是漏洞,是策略执行断点。
某电商公司在大促前发现,60%的API接口没启用速率限制。不是技术做不到,而是策略里写了“核心接口需限流”,但没人负责把它落到网关配置模板和CI/CD流水线检查项中。
从三个动作开始动起来
1. 把策略拆成可触发的检查点
比如“禁止明文存储密码”不能只写在制度里,要变成:每次代码提交时,SonarQube扫描检测password、pwd、passwd等字段是否出现在log语句或变量赋值中;部署前,Ansible脚本自动校验MySQL配置文件中plugin_validate_password_policy是否设为STRONG。
2. 权限回收要有“默认拒绝+主动申请”机制
运维同学习惯给新人开通root权限图省事,结果某次误删了Redis主节点数据。后来改成:所有账号初始只有read-only权限;需要写权限必须填在线申请单,注明用途、时效、审批人,并由安全组在堡垒机后台人工开启,72小时后自动失效。
3. 日志不是摆设,得有人真看
有团队每天生成2TB访问日志,但从不分析。后来把ELK里nginx日志的$remote_addr + $request_uri + $status组合,按分钟聚合出异常模式(如5分钟内同一IP触发15次403),再推送到企业微信机器人。不到两周,就揪出两个内部员工用爬虫批量导出用户手机号的行为。
一个小而实的落地示例
某SaaS公司把“防止越权访问”策略落地为三行代码+一个配置:
if (req.user.role !== 'admin' && req.params.userId !== req.user.id) {
throw new ForbiddenError('无权访问他人数据');
}同时,在Swagger文档中强制标注每个接口的@SecurityRequirement(name = "userAuth", scopes = ["user:read:own"]),CI阶段用脚本校验所有GET /users/{id}接口是否包含该注解。没加?构建直接失败。
安全不是靠堆设备,是靠把规则嵌进开发、测试、上线每一个环节里。哪天你发现新同事第一次提交代码就被CI拦住说“JWT密钥不能写死”,那说明策略真的活了。