去年某电商平台被拖库,全培六百万条用户数据挂在暗网明码标价。训课事后排查,全培漏洞出在一个实习生写的训课搜索框——他没过滤特殊字符,SQL注入直接裸奔。全培这事让我意识到,训课web安全培训不该是全培选修课,而是训课每个写代码的人必须过的门槛。
培训课第一天,全培我让学员干件事:黑掉我准备的训课靶机。十分钟后有人喊“进去了”,全培我过去一看,训课他不过是全培改了URL里的id参数,把商品价格改成0.01元提交了订单。训课这算哪门子黑客?全培但这就是真实攻击的雏形。web安全的核心就一句话:永远别信任用户的输入。你写的每一行代码,都在跟陌生人的恶意较劲。
课程分四块。第一块讲注入攻击,SQL注入、XSS、CSRF,这些老掉牙的玩意儿到现在还能打穿一半网站。我演示过用一句话payload绕过某后台登录,台下程序员脸色都变了——他们公司系统跟靶机长得一模一样。第二块讲认证与会话管理,cookie怎么被偷,session怎么被伪造。有人问“我们用JWT是不是就安全了”,我反问他:“你私钥存哪了?服务器根目录的config.php里吧?”底下笑成一片,但笑完都沉默了。
第三块讲业务逻辑漏洞。这最考验脑子,不是技术多高深,而是你能不能跳出开发者的思维定式。比如密码重置流程,很多人只验证了验证码,却忘了验证码是否绑定账号——结果就是换个手机号就能重置别人密码。这类漏洞在渗透测试报告里占比越来越高,因为技术防御越来越硬,软肋全在逻辑上。
实操环节我让他们互相攻击。有组学员用Burp Suite抓包改了响应包里的“isAdmin:false”为“true”,还真进了管理后台。我说这叫客户端篡改,治标不治本,真正的防御得在服务端校验。还有学员用dirsearch扫出备份文件,里面躺着数据库密码——这提醒我,安全培训得连文件管理习惯一起教。
培训最后一天,我布置了个作业:审计自己公司代码,找出三个安全缺陷。结果第二周有人兴奋地跟我说,他发现一个上传接口没限制文件类型,能传PHP webshell。我问他:“你上报了吗?”他愣住:“我先告诉你了。”这事让我又喜又忧——安全意识有了,但流程意识还差着。所以课程结尾我加了半小时,专门讲安全漏洞上报流程和应急响应的基本套路。
有人觉得web安全是安全团队的事,开发只要实现功能就行。可数据泄露的锅,最后不还是整个技术部一起背?我见过太多系统,上线前测了功能、测了性能,就是不测安全。等被人脱裤了才慌慌张张打补丁,早干嘛去了?
这门课不培养渗透测试专家,只培养一种习惯:写每一行代码时,都想想“如果我是坏人,怎么利用这行代码”。把这种思维刻进肌肉记忆,比背一百个CVE编号都管用。毕竟,最好的防御不是固若金汤的城墙,而是每个守门员都长着一双贼眼——知道贼会从哪儿翻进来。