您现在的位置是:探索 >>正文

程序漏洞叫什么

探索456人已围观

简介程序漏洞在英文里叫 bug,原意是“虫子”。这个叫法能追溯到 1947 年,哈佛大学的 Mark II 计算机出了故障,工程师从继电器里拽出一只飞蛾,把它贴进日志本,旁边写了一句“第一个实际找到的 b ...

程序漏洞在英文里叫 bug,程序原意是漏洞“虫子”。这个叫法能追溯到 1947 年,程序哈佛大学的漏洞 Mark II 计算机出了故障,工程师从继电器里拽出一只飞蛾,程序把它贴进日志本,漏洞旁边写了一句“第一个实际找到的程序 bug 案例”。这事有实物为证,漏洞那只蛾子现在还在博物馆里。程序但说实话,漏洞用“虫子”来比喻代码里的程序错误,挺贴切的漏洞——它们就是会钻进来,藏在你看不见的程序角落,时不时咬你一口。漏洞

不过 bug 这个词涵盖的程序范围太宽了。内存泄漏是 bug,数组越界是 bug,按钮点一下没反应也是 bug。程序员嘴上说“有 bug”,实际可能在说十几种完全不同的东西。要真按逻辑分,我觉得至少得拆成几类来看。

最直接的一类是语法错误。代码写错了关键字,少了个括号,变量名拼错。这类问题编译器或者解释器当场就拦下来了,红色报错甩你脸上,想跑都跑不掉。这种其实不算“漏洞”,顶多算打字失误。真正让人头疼的是逻辑漏洞。

逻辑漏洞的意思是,代码语法完全正确,跑起来也不报错,但结果就是不对。比如一个电商网站算折扣,满 200 减 30,代码写成 if (total > 200) discount = 30;。语法没问题,可用户刚好买了 200 块的东西,一分钱不减。应该用 >= 却用了 >,差一个等号,业务规则就歪了。这种漏洞测试不一定能发现,因为没人会去试那个边界值——除非有个较真的测试工程师,恰好买了正好 200 块的东西。

还有一类更隐蔽的,叫竞态条件。多个线程同时读写同一块数据,谁先谁后不确定,结果就不确定。银行转账最怕这个:A 账户扣了钱,B 账户还没加上,中间系统崩了,钱就凭空消失。这种漏洞复现极难,有时候跑一万次才出一次,日志里什么都看不出来。修起来也麻烦,加锁、改队列、调整事务隔离级别,每一种方案都有代价。

安全漏洞是另一个维度的事。前面说的逻辑漏洞顶多让功能出错,安全漏洞能让人把数据库拖走。SQL 注入是最经典的例子:用户在输入框里填一段 SQL 语句,后端没做参数化查询,直接拼进数据库命令里,整张用户表就被 SELECT 出来了。2011 年索尼 PlayStation Network 被攻破,7700 万个账户信息泄露,根源就是几处没防住的注入漏洞。服务停了 23 天,损失按亿美元算。一个拼接字符串的疏忽,代价就这么大。

我观察到一个现象:很多非技术背景的人会把“漏洞”和“故障”混为一谈。服务器宕机了叫漏洞,网速慢了也叫漏洞。其实不是。硬件故障、网络抖动、配置错误,这些是运维层面的事。漏洞特指代码本身写错了——逻辑写错了,边界没考虑,异常没处理。它是人为的,是可以在代码审查阶段抓住的。只不过人写代码,人就会犯错,所以漏洞永远抓不完。

有意思的是,有些漏洞最后变成了“特性”。早期 Excel 把 1900 年当成闰年,这个错误一直没修,因为修了反而会导致大量历史数据计算错位。程序员管这叫“向后兼容”,本质上就是承认:这个 bug 我们改不动了,留着吧。

所以程序漏洞叫什么?叫 bug 最省事,但真要理解它,得知道它背后是语法错、逻辑错、并发错还是安全错。每一种的成因、检测方式、修复成本都不一样。那只 1947 年的飞蛾早就死了,但它留下的这个词,还在每天折磨着写代码的人。

Tags:

相关文章

  • 网站url地址怎么获取

    探索

    浏览器地址栏里那一串字符,就是你正在访问页面的URL。想把它复制下来,最直接的办法是单击地址栏,整段地址会自动高亮,按Ctrl+CMac上按Command+C)就搞定了。但如果你以为所有URL都长在地 ...

    【探索】

    阅读更多
  • 漏洞用什么动词搭配

    探索

    ```html 漏洞用什么动词搭配 body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "H ...

    【探索】

    阅读更多
  • 财神捕鱼漏洞破解技巧

    探索

    先说结论:所谓“财神捕鱼漏洞破解技巧”,根本不存在。你输掉的钱,不是被什么“系统漏洞”卡住了,而是被概率和算法吃掉的。我见过太多人拿着手机给我看,说“哥,这个位置鱼明明卡住了,我打了几百炮就是不死”, ...

    【探索】

    阅读更多


友情链接