您现在的位置是:综合 >>正文
有漏洞吗
综合29467人已围观
简介去年秋天,我在一个技术群里看到有人发消息:“谁有空帮忙看看,我们后台好像被人绕过去了。”配图是一张订单列表,金额全是0.01元。这不是打折活动,是有人发现了支付逻辑里的漏洞——把商品数量改成负数,总价 ...
去年秋天,有漏洞我在一个技术群里看到有人发消息:“谁有空帮忙看看,有漏洞我们后台好像被人绕过去了。有漏洞”配图是有漏洞一张订单列表,金额全是有漏洞0.01元。这不是有漏洞打折活动,是有漏洞有人发现了支付逻辑里的漏洞——把商品数量改成负数,总价就变成了负数,有漏洞再叠加优惠券,有漏洞最后实付一分钱。有漏洞开发这个功能的有漏洞人当时觉得“没人会这么干”。
“没人会这么干”这句话,有漏洞大概是有漏洞漏洞史上出现频率最高的墓志铭。
我后来跟那个群的有漏洞当事人聊过。他说修复只用了二十分钟,有漏洞加了一行数量必须大于零的判断。但排查花了整整两天,因为没人想得到去测试负数。测试用例里全是正常值:1、2、5、10。边界值测了0,没测-1。这就是漏洞的典型面貌——它不在你盯着看的地方,在你默认“不可能”的地方。
2014年,苹果的“iCloud艳照门”也是类似逻辑。不是服务器被攻破,是攻击者用脚本不断尝试回答安全问题。苹果当时没对安全问题的尝试次数做限制。一个没有频率限制的接口,等于把保险柜密码盘交给别人随便转。后来加了限流,但照片已经流出去了。
漏洞这东西,本质上是“预期”和“现实”之间的裂缝。开发者预期用户会按界面提示操作,现实是有人直接调接口。预期输入是字符串,现实是有人传了数组。预期金额是正数,现实是有人填了负号。
我自己的项目也出过事。一个文件上传接口,我写了后缀名白名单,觉得挺安全。结果有人上传了一个叫shell.php.jpg的文件。我的代码取最后一个点后面的部分,得到jpg,放行。但服务器配置里,Apache会把.php.jpg当成PHP解析——因为它在找文件名里第一个.php。两边逻辑不一致,漏洞就出来了。后来我改成同时检查后缀和MIME类型,还改了服务器配置。但那次教训让我明白:安全不是一道墙,是很多道墙,每道墙的砖缝方向还不一样。
有人觉得漏洞离自己很远。写个内部工具,不联网,谁攻击?可内部工具往往权限更大。一个同事写了个批量删除的脚本,参数是文件路径。他预期是传单个路径,结果有人传了/。脚本没做校验,直接执行。幸好那台机器是测试环境,数据不重要。但逻辑是一样的:你以为的输入范围,和别人实际能传的,是两回事。
还有更隐蔽的。时间竞争。两个请求同时到达,都检查了“余额是否足够”,都通过了,然后都扣款。余额变成负数。这种漏洞不靠构造畸形输入,靠的是时序。你盯着代码看,逻辑没问题。跑起来,偶尔出问题。复现都难。
我现在写代码,会刻意问自己:如果我是攻击者,我会怎么用这个功能?不是按界面提示用,是直接调接口、改参数、重复提交、并发请求。这个习惯救过我几次。有一次发现优惠券可以叠加使用——前端限制了,后端没限制。前端限制等于没限制,因为请求可以绕过前端直接发。
所以回到标题那个问题:有漏洞吗?
有。而且往往在你最自信的地方。你觉得这里不可能出问题,所以没测。你觉得用户不会这么干,所以没防。你觉得逻辑很清晰,所以没写边界判断。漏洞就在这些“觉得”里面。
修复漏洞不难,难的是承认自己没想到。那个一分钱订单的开发者后来跟我说,他加完判断之后,把所有涉及数值计算的接口都翻了一遍。又找出两个类似问题。他说:“原来我以为只是这一个地方,后来发现是一种思维习惯。”
这话我记了很久。漏洞不是代码里的bug,是思维里的盲区。代码只是把它暴露出来而已。
Tags:
上一篇:渗透剂价格渗透剂生产厂家翔邦化工
下一篇:九江e媒官网
相关文章
自学网站大全免费
综合我花了三年时间,收藏了三百多个学习网站,最后真正打开超过三次的,不超过二十个。剩下的全躺在书签夹里吃灰。这让我明白一件事:免费学习资源多到泛滥,缺的是筛选和坚持。所以这份清单,我只留那些我反复用过、确 ...
【综合】
阅读更多搞笑漏洞
综合```html 搞笑漏洞 搞笑漏洞 我上次遇到一个能让人笑出声的漏洞,是在一个外卖App上。点了一份麻辣香锅,备注栏里写了“不要葱”。结果送来的盒子上贴了两张标签,一张印着“不要葱”,另一 ...
【综合】
阅读更多系统更新是因为操作系统存在漏洞吗
综合很多人一看到手机弹窗“系统更新”,第一反应就是:又出漏洞了,赶紧补。这个判断对了一半,但漏掉了另一半。系统更新和漏洞修复之间,不是等号,更像是一条街上两家挨着的店——经常一起出现,但各有各的生意。 我 ...
【综合】
阅读更多