当前位置:首页 > 热点

有什么漏洞

```html 有什么漏洞

去年冬天,我帮朋友的有什漏洞公司排查一个内部投票系统。表面看一切正常,有什漏洞用户点“提交”后页面跳转,有什漏洞后台记录一条数据。有什漏洞但我用浏览器开发者工具把提交按钮的有什漏洞 disabled 属性删掉,然后快速点了十七次——数据库里多了十七条投票记录,有什漏洞来自同一个账号。有什漏洞前端那个“已投票”的有什漏洞灰色按钮,就是有什漏洞个摆设。

漏洞这东西,有什漏洞往往不在你严防死守的有什漏洞地方。它藏在“以为不会有人这么做”的有什漏洞缝隙里。那个投票系统,有什漏洞后端接口没做频率限制,有什漏洞也没校验用户是否已经投过票。开发的人后来跟我说,他想着“按钮都灰了,谁会去改代码呢”。可偏偏有人会。我不是第一个发现的,但我是第一个告诉他的人。

// 他原本的校验逻辑大概是这样的:
if (user.hasVoted) { button.disabled = true; }
// 然后提交时……什么都没再查。

这让我想起更早的一件事。2019年,某连锁酒店的自助入住机。我拿朋友的身份证刷了一下,选了间房,机器吐出一张房卡。但退房时我发现,那张房卡还能刷开隔壁房间的门——因为系统只写了卡号,没写有效期和房间绑定。前台小姑娘听我说完,愣了半天,说“从来没人试过”。

漏洞的另一个名字,叫“没想到”。没想到用户会改前端代码,没想到有人会拿房卡去试别的门,没想到输入框里可以填负数。 电商平台有过一个经典案例:用户把商品数量改成 -1,结算时总价变成负数,平台反而要倒贴钱。这个漏洞被修复前,有人用一分钱买走了好几台电视。听起来像段子,但它是真事。

我自己的代码也出过丑。几年前写一个抽奖页面,中奖概率写在 JavaScript 里,大概是 Math.random() < 0.1。上线第二天,一个懂行的用户直接在控制台把 0.1 改成 1,然后连抽了二十次一等奖。他截图发给我,配了个笑脸。我盯着屏幕,脸上发烫。后来所有概率判断都挪到了后端,前端只负责展示结果。

你看,漏洞不总是技术问题。它有时候是思维惯性——觉得“用户会按我设计的方式操作”。但用户不会。用户会乱点、会刷新、会断网、会改参数、会同时开十个标签页。你没想到的每一种操作,都可能变成一条通往数据库的后门。

还有一类漏洞更隐蔽:逻辑上的自相矛盾。我见过一个签到系统,每天签到得积分,连续七天额外奖励。但如果你在第七天签完到之后,把系统时间调回第一天,再签到——它又给你算一次连续。时间戳校验只看了客户端,服务器没做二次确认。这个漏洞被人写成脚本,刷了上百万积分。运营那边看到数据异常时,已经过去两个月了。

写代码的人容易陷入一种幻觉:我写了校验,所以它是安全的。可校验的位置、时机、依赖的条件,任何一个环节松动,整面墙就塌了。就像你把钥匙藏在门口地毯下,然后告诉自己“没人会掀地毯”。

说回那个投票系统。朋友后来问我怎么改。我说很简单,后端每次提交都查一遍数据库:这个用户今天投过没有。前端那个灰色按钮,留着给正常人看就行。他照做了。再后来他告诉我,有个用户发邮件投诉,说“我明明只投了一次,怎么显示已投票”——那个人大概就是之前刷了十七次票的。你看,漏洞被堵上时,最先叫疼的往往是利用漏洞的人。

这行干久了,会养成一个习惯:看到任何输入框,都想填个 ' OR '1'='1 试试;看到任何按钮,都想看看它背后的请求长什么样。不是不信任,是知道“正常使用”和“实际可能发生的事”之间,隔着一整个互联网的想象力。

漏洞不会消失。它只是换了个地方待着。你今天修好了这个,明天新写的功能里又埋了一个。能做的大概就是:少一点“应该不会”,多一点“万一呢”。

```

分享到: