[{"createTime":1735734952000,"id":1,"img":"hwy_ms_500_252.jpeg","link":"https://activity.huaweicloud.com/cps.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905","name":"华为云秒杀","status":9,"txt":"华为云38元秒杀","type":1,"updateTime":1735747411000,"userId":3},{"createTime":1736173885000,"id":2,"img":"txy_480_300.png","link":"https://cloud.tencent.com/act/cps/redirect?redirect=1077&cps_key=edb15096bfff75effaaa8c8bb66138bd&from=console","name":"腾讯云秒杀","status":9,"txt":"腾讯云限量秒杀","type":1,"updateTime":1736173885000,"userId":3},{"createTime":1736177492000,"id":3,"img":"aly_251_140.png","link":"https://www.aliyun.com/minisite/goods?userCode=pwp8kmv3","memo":"","name":"阿里云","status":9,"txt":"阿里云2折起","type":1,"updateTime":1736177492000,"userId":3},{"createTime":1735660800000,"id":4,"img":"vultr_560_300.png","link":"https://www.vultr.com/?ref=9603742-8H","name":"Vultr","status":9,"txt":"Vultr送$100","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":5,"img":"jdy_663_320.jpg","link":"https://3.cn/2ay1-e5t","name":"京东云","status":9,"txt":"京东云特惠专区","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":6,"img":"new_ads.png","link":"https://www.iodraw.com/ads","name":"发布广告","status":9,"txt":"发布广告","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":7,"img":"yun_910_50.png","link":"https://activity.huaweicloud.com/discount_area_v5/index.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=aXhpYW95YW5nOA===&utm_medium=cps&utm_campaign=201905","name":"底部","status":9,"txt":"高性能云服务器2折起","type":2,"updateTime":1735660800000,"userId":3}]
国外的一个苹果用户,申请 iCloud 服务,被匪夷所思的原因拒绝了。
不但拒绝,她的 ID 还直接被封了 6 个月。
这一切,都是因为她的名字里有个 true。
而且,这个问题还真不好办,推特上一位工龄 30 年的老程序员劝她:
解决这个问题,最好的办法还是改名…
一个“true”就能干扰到苹果系统?踩到这个坑的用户,真的只能改名吗?
“命犯编程”的尴尬
众所周知,在编程语言中,true(真)是一个逻辑值,与“false”相对。true 在编程语句中代表 1 或大于 1 的数,反之 false 代表 0
或 null。
而这位不幸的大姐,名叫 Rachel True,是美国的一位演员、模特。
True 作为姓氏确实很罕见,但是这个好听的名字在申请 iCloud 时,却成了大麻烦。
她在输入名字时,姓氏中的t,没有大写,直接敲上了“true”。
而在苹果返回的结果中,可以看到系统无法将 true 赋值给变量 lastName。
也就是说,本来应该作为字符串的“true”,直接被系统认定成了布尔值。
这个错误,导致 iCloud 的申请进程终止。
并且,据 Rachel True 说,苹果还直接将她的 ID 锁定 6 个月。
原因没有细说,不过很有可能是系统判定流程异常,采取了规避恶意 SQL 注入的防御性手段。
过去的几天,她都在不断地向苹果公司申诉,和 AppleSupport 周旋,平均每天要花两三个小时。
但是问题根本解决不了,iCloud 服务费却依然再收。
当然,这也怪不得苹果,true 在代码中,毕竟已经用了几十年。
而大家分析,苹果的代码中,没有强制将所有进入 lastName 的值识别为字符串的机制。
所以解决这个问题,要么在输入时给名字前后加单引号,要么真的只能改名了。
那些比“true”还难搞的名字
程序员中流传着一个经典的笑话 Bobby Tables。
小孩名叫 Robert’); DROP TABLE students,结果把整个学校的学生资料都搞没了。
这下你们应该明白对输入做净化处理有多重要吧??
不少人都说,这次的事件,简直就是现实版 Bobby Tables。
除了 true,还有很多人的名字都把系统搞崩溃过。
比如,有姓 Root 的、有姓 Self 的,当然还有姓“Null”的。
Null 这个姓还并不罕见,很多人出门连买机票都很困难。外媒报道过一位 Jennifer Null,结婚后改了姓,才能正常使用各种服务。
推特上,有一位从荷兰来的程序员小姐姐,她的姓氏是 van Os,当年毕业入职时,公司用 bash script 建立新员工账号。
结果,操作时没有在名字上加引号,姓氏中的空格直接搞崩了整个脚本。
其实,这种问题,除了给用户本人带来诸多不便,在系统安全上也存在很大的安全隐患。
就像很多人提醒的那样,每一个字符串的误识别,都是黑客可以利用的 SQL 注入攻击机会。
好在,我们中国用户不用担心这个问题~