小程序服务器安全配置:端口管控与数据保护
|
去年五一期间,我蹲在客户机房改nginx配置,空调坏了,后颈全是汗,手抖着敲完那行limit_conn perip 16;隔壁组小陈接了个电话,说他女儿发高烧刚挂上急诊,语气挺平——可他右手食指还在键盘上敲着curl -X POST测试那个没关的debug端口。 我原以为只要把8080、8000、9000全block掉就稳了,结果安全团队扫出来三个开着的:2375(Docker daemon)、6379(redis)、还有个他们根本没注册的40001,绑在node进程上——查日志发现是外包写的支付回调模块硬生生自己起了个HTTP服务器,没走主框架,连log都打在/var/tmp/.log。这个我敢打包票,我扒过三遍源码,还截了它启动时的ps输出,带-tty参数那种。 窗外下着雨,不是那种毛毛雨,是砸在玻璃上啪啪响的那种,整个机房顶棚漏了一处,水滴在UPS旁的防静电地板上,积了浅浅一滩,反光里能看见我后脑勺的碎发。运维老张蹲那儿用胶带缠线缆接口,缠了四圈,每缠一圈就啧一声。他说:“你信不信?这胶带比他们写的密钥管理文档还经用。” 优胜劣汰。就这么五个字。不是说谁活下来谁牛,是说活下来的那几个配置项,全是在被扫出洞、被打穿、被拖进审计会、被临时拔网线之后——剩下来的。比如keepalive_timeout 30s这个值,没人能告诉你为什么是30不是29或31,但所有没改成这个的实例,今年上半年全进过应急响应清单。再比如那个/data/private/目录权限,非得是700且owner为nobody——可上次我看见一个生产库的备份脚本,把AES密钥明文写进crontab环境变量里,还加了注释:“防误删”。防误删?防的是人,又不是狗。 我桌上那盒酸辣粉早凉透了,汤凝成淡黄色半透明糊状,浮着两粒花生米,一粒斜着,一粒直立着。筷子搁在盒沿,尖头朝下,微微颤。对面坐的是乙方架构师,穿灰衬衫,袖口卷到小臂中段,左手无意识地捻着右手小指指甲边缘,捻了三分十八秒,然后突然开口:“我们其实建议上Service Mesh……” 我打断他:“你们mesh管得了那个连k8s都没接入、跑在阿里云经典网络里的PHP 5.6实例吗?” 他停住,指甲不捻了,转而摸后颈,摸到一根翘起来的头发,揪掉了。 数据保护?别扯TLS1.3和HSTS了。真正让我后怕的是三天前——某小程序上传头像功能,前端传base64,后端解码后直接file_put_contents(‘/tmp/’.$uuid.’.jpg’)。路径没校验,扩展名没强制,MIME没验,连文件头都懒得读。结果有人传了个zip,解压命令写死在shell_exec里——没过滤点号和分号。幸亏线上PHP禁了proc_open。这事我跟客户说了七遍,他们第七次回复是:“已安排排期”。排期?排到哪年?排到审计组把他们的S3桶公开策略截图发到微信群里? 机房灯管滋滋响,左边第三根闪得最勤,每二十秒左右抽一下,像心跳。小陈后来没去急诊,说挂号排到凌晨两点,先回来把redis密码换掉——换完才走,走前顺手把我那盒酸辣粉的盖子严丝合缝扣上了。我没拦,反正汤已经不冒气了。 有次半夜接到电话,是测试环境DBA,声音发干:“你那个token刷新逻辑,JWT载荷里塞了union select的payload……我们扫出来了。” 我第一反应不是看代码,是翻Git记录——发现是两周前一次“兼容性补丁”,由一个叫zhangwei23的账户提交,commit message写的是:“修复iOS14+ token过期跳转白屏”,底下附了个笑脸emoji。这种事你说气不气?气。但更烦的是——我翻他三个月来的所有提交,十七处用到了eval、十二处base64_decode未校验来源、八次直接拼接SQL字段名。没人review,也没人reject,因为上线单上写着:“紧急体验优化,影响范围<3%用户”。<3%?那3%里刚好有个审计员,正在测越权访问。 所以现在我改配置前,先做三件事:一、看运维群最后十条消息里有没有“xxx实例CPU突增”;二、搜一遍历史工单,找“调试端口残留”关键词;三、打开企业微信,搜那个人的手机号,看他上周是不是休过育儿假——要是休了,他改的配置大概率没动生产,而是全堆在开发分支的.env.example里。这个我说不准,但试过五次,四次准。
文章配图,仅供参考 说到育儿假……我老婆今早发微信说产检预约成功,下午三点,要我请假陪。我没回。把刚写好的iptables规则存了档,顺手给老张递了根烟。他没接,指指墙上禁烟标志,又指指自己嘴里那根——叼着的,没点。我就把烟收了,烟盒折了两道,塞进鼠标垫下面。鼠标垫底下压着去年十一月的变更记录打印稿,字迹有点洇,第二页右下角有咖啡渍,形状像只歪嘴的青蛙。 下一步?我把那台裸奔的40001端口服务,手动改成了监听127.0.0.1:40001,然后加了tcp_wrapper。至于外面那层反代?等甲方下周把那份《第三方系统接入安全白名单》盖章回来再说。我知道它下周也回不来。所以我同时开了个定时任务,每六小时检查一次lsof -i :40001 | grep LISTEN,一旦发现绑定0.0.0.0,就自动kill -9——不通知任何人,只往我的个人钉钉发条markdown消息:“又来了。” (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

