身份验证绕过:别让登录形同虚设
某次上线新功能,开发同事图省事,直接用前端传来的用户ID做权限判断。结果测试一上Burp Suite,改个请求头,普通用户秒变管理员。这种低级错误在小团队里真不少见。后端必须对每个敏感操作重新校验身份和权限,不能信任任何客户端传来的数据。
SQL注入:老问题还在出事
看到代码里拼接SQL字符串就头疼。比如用户登录写成:
SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'攻击者输个 ' OR 1=1-- 就能绕过登录。现在都2024年了,还用手拼SQL?参数化查询三分钟就能搞定的事,非要留个大口子。
文件上传漏洞:图片也能变后门
有家公司允许用户上传头像,只检查了扩展名是不是.jpg。结果上传一个shell.php.jpg,服务器没做二次校验,直接当成PHP执行了。文件上传功能必须限制目录权限、检查MIME类型、重命名文件,最好放在独立域名下运行,避免跨站影响。
API接口滥用:别让数据随便拿
做过一个项目,商品列表接口没做分页限制,也没频率控制。爬虫一口气拉走二十万条数据,数据库直接被打满。接口设计要默认加限制,比如每页最多50条,用户每分钟最多调100次。敏感接口还得加行为分析,发现异常及时告警。
依赖组件别乱用:别人的轮子可能漏油
引入第三方库图方便,可曾想过它有没有漏洞?去年Log4j事件多少系统中招。现在我们上新组件前必须跑一遍SCA工具,查已知漏洞。连commons-lang这种基础包都得看版本,别以为老牌就安全。
日志别太老实:暴露信息等于指路
调试时打印堆栈没问题,但上线后还把数据库连接字符串、密钥写进日志就离谱。攻击者拿到日志文件,等于送上门的通行证。生产环境日志要脱敏,敏感字段打码,错误信息也别返回具体技术细节。