您现在的位置是:百科 >>正文
漏洞靠谱
百科55787人已围观
简介我盯着一行报错看了四十分钟,最后发现漏洞出在别人写的登录接口里——那个程序员把密码比对写成了`if (userInput == storedPassword)`,字符串比较变成了引用比较。用户输入永远 ...
我盯着一行报错看了四十分钟,漏洞靠谱最后发现漏洞出在别人写的漏洞靠谱登录接口里——那个程序员把密码比对写成了`if (userInput == storedPassword)`,字符串比较变成了引用比较。漏洞靠谱用户输入永远不可能等于内存里的漏洞靠谱同一个对象,所以这个接口永远返回false。漏洞靠谱但诡异的漏洞靠谱是,测试居然通过了。漏洞靠谱
因为测试用例里写的漏洞靠谱是`assertTrue(login("admin", "admin"))`,而管理员账号的漏洞靠谱密码恰好被硬编码成了同一个字符串常量。Java的漏洞靠谱字符串池让这两个"admin"指向了同一个对象,引用比较歪打正着返回了true。漏洞靠谱生产环境没人用硬编码密码,漏洞靠谱于是漏洞靠谱所有真实用户都登不进去。
这让我想起更离谱的漏洞靠谱一次。某个支付系统对接银行接口,漏洞靠谱对方文档里写"金额单位:分",我们这边同事没看注释,直接拿元去传。结果一笔九块九的商品,银行那边收到的是9分钱。漏洞不在代码逻辑,在文档和实现之间的那条缝里。更绝的是,这个bug上线三个月没人发现,因为测试环境用的全是整数金额——9.9变9分钱,9块变9分钱,10块变1毛钱,全都对不上,但测试只验证了"支付成功"这个状态码。
漏洞这东西,最坑人的地方在于它往往不是"写错了",而是"写对了但没完全对"。就像你问路,人家告诉你往东走,你走了十公里发现是断头路——人家没说错,只是没告诉你东边有个悬崖。代码里的漏洞多半是这种"正确的不完整"。
前几天我review一个同事的代码,他处理用户上传的图片,用`getOriginalFilename()`拿文件名,然后直接拼到路径里。我问他如果文件名是`../../etc/passwd`怎么办,他愣了一下说"谁会起这种文件名"。我当场在测试环境传了个`../../tmp/hack.txt`,服务器上的文件被覆盖了。他脸都白了。
但说实话,这种漏洞我一点不觉得他蠢。因为我自己也干过类似的事——用正则表达式解析HTML,结果被嵌套标签搞崩溃。后来学乖了,所有用户输入统一走白名单校验,宁可多拦几个合法请求,也不放一个非法字符进来。
漏洞真正的可怕之处,不是某个具体的技术失误,而是那种"我以为我懂了"的错觉。你以为字符串比较就是字符串比较,你以为金额单位就是元,你以为文件名就是文件名。现实总会在某个不起眼的角落给你来一下。
所以我现在写代码有个习惯——每写完一个模块,就逼自己想想"如果我是个坏蛋,我会怎么搞这个系统"。这个思维转换救了我好几次。上次想到有人可能用超长字符串撑爆内存,加了个长度限制,结果压测的时候真有人这么干。
漏洞靠不靠谱?靠谱得很。它永远在那里,等着你犯错。你唯一能做的,就是承认自己会犯错,然后尽量把错误留在测试环境,而不是生产环境。
Tags:
下一篇:怎么看手机有没有拆过
相关文章
黑盒工坊里面的插件私服能用吗
百科黑盒工坊里的“插件私服”功能,说白了就是绕过官方渠道,直接下载别人分享的插件包。能不能用?能,但得看你想要什么。 我去年在怀旧服开荒期,就干过这事。当时团里要求装某个字符串插件,官方库里更新慢,我图省 ...
【百科】
阅读更多黑吃黑在线观看
百科《黑吃黑》这部剧,我是在一个阴雨天点开的。原本只想随便看一集打发时间,结果一口气刷完了三季。它根本不是什么警匪片,它是一台绞肉机,把所有人都搅进去,吐出来的全是渣。 故事发生在女妖镇——一个名字听着就 ...
【百科】
阅读更多360违法信息的怎么继续访问
百科360浏览器弹窗提示“违法信息”,页面被拦腰截断,红底白字刺得眼睛疼。多数人第一反应是关掉重开,但网址栏那串字符明明就是自己输对的。别急着骂流氓软件,先搞明白这提示到底从哪来——它压根不是公安系统发的 ...
【百科】
阅读更多