|
OWASP Top 10 已经连续十几年把注入攻击排在榜首,应用常这不是见漏没有原因的。2021年,应用常一家做身份认证的见漏SaaS公司因为SQL注入漏洞,被拖走了几百万条用户记录,应用常股价当天跌了11%。见漏这类攻击的应用常原理很简单:你在登录框里输入 ' OR 1=1 --,后端如果直接拼接SQL语句,见漏数据库就会乖乖把全表数据吐出来。应用常但现实中很多开发者觉得"我用了参数化查询就万事大吉",见漏结果在动态排序、应用常批量更新这些边角料功能上又拼了字符串。见漏 XSS(跨站脚本攻击)是应用常另一种高频漏洞,它的见漏恶心之处在于攻击目标不是服务器,而是应用常其他用户。我见过一个电商网站,商品评价里能插入<script>标签,结果所有看过该商品的用户cookie都被偷走了。更麻烦的是,现在前端框架普遍自动转义,但如果你用了v-html或dangerouslySetInnerHTML这类危险接口,等于亲手把门锁拆了。 文件上传漏洞通常和业务强相关。2020年某云盘厂商出过事:攻击者上传了一个带PHP后门的图片文件,文件名伪装成.jpg,但服务端没校验文件内容,只看了扩展名。拿到webshell之后,整个存储桶被翻了个底朝天。这类漏洞的修复难点在于,你得同时检查扩展名、MIME类型、文件头,最好还要做二次渲染。 越权漏洞(IDOR)则是逻辑层面的坑。比如一个简单的订单查询接口,参数是order_id=12345,如果你没校验这个订单是否属于当前登录用户,那别人遍历一下订单号,你的收货地址、手机号就全暴露了。这种漏洞在RESTful API里特别常见,因为开发者图省事,直接用了自增ID做资源标识。 反序列化漏洞属于进阶玩法,但危害极大。Java的ObjectInputStream如果没做白名单过滤,攻击者构造一个恶意的序列化对象,就能触发远程代码执行。2019年Apache Shiro爆出过这种洞,当时全网扫了一遍,大批内部系统裸奔。PHP和Python也有类似问题,unserialize()和pickle.loads()都是高危函数。 还有一类容易被忽略的——安全配置错误。比如服务器开着目录浏览,备份文件放在web根目录下,或者用了默认密码。2017年Equifax泄露1.4亿人数据,根因就是Apache Struts的一个已知漏洞没打补丁,但更丢人的是,他们的管理员账号密码是admin/admin。 最后说说业务逻辑漏洞,这类最让安全工程师头疼。比如优惠券可以重复领取、积分兑换比例可以篡改、验证码不失效。我认识的一个白帽子,靠改前端JS里的价格参数,在某生鲜平台用0.01元买到了进口牛排。这类漏洞没有标准修复方案,只能靠开发者多想一步"如果用户不按常理出牌怎么办"。 这些漏洞里,有些靠工具扫描就能发现,有些得靠渗透测试人员手动去试。但最根本的,还是得有安全意识——别把用户输入当数据,要当代码来防。写代码的时候多问自己一句:如果这个字段被塞了特殊字符,我的程序会怎么反应? |