(点击上方公众号,可快速关注)
编译:伯乐在线/飞哥的咖啡
【导读】:知名安全技术博主 Tony Hunt 吐槽了一些正规公司、正规网站的安全漏洞:HTTP + cookie 里明文存放用户名密码;输入用户名与生日就能重设密码;密保问题;邮箱绑定个人信息等等。
我的朋友 Lars Klint 发过这条推:「你的密码并不是独一无二的」
(附图中的提示为:密码已经被 XXX 使用。请换一个。)
我顺手把它转发了出去,因为我知道还有比这更疯狂的事情。Twitter 用户没有把它当作一个在 Reddit 上流行的笑话,而是带着恐惧和指责评论它。事实上,这完全是可能的。呵呵,我看到过一些非常愚蠢的安全问题,它不仅让我相信这篇 tweet 的真实性,并且认为这非常有可能发生。你不信?来,朋友,帮我拿着啤酒,我来给你说道说道…
记住我
假设现在你想做一个“记住我”功能,就是在方框里打勾,然后下次回到网站时,已经登录的那种。这是 Black 和 Decker 的做法:
是的,这是 cookie 中 Base64 编码版本的密码,每次请求时的发送其实都不安全,而且由于它没有被标记为“安全的”,整个发送过程都很自由,容易被获取。
觉得这很糟糕?试试我在这一篇文章中提到的 Aussie Farmers Direct 的做法:
看吧,这是安全的,但它仍然是一个 cookie 中的密码,并且由于它不是 HttpOnly,在网站上仍然会有 XSS 攻击的风险。那对此他们是如何回应的?这就引出了下一个话题…
企业的反应
回到 2013 年,我做了一件尽职的事情,让 Aussie Farmers 知道了上述风险。我还建议,他们不应该通过邮件发送密码(这是我最讨厌的事情之一),之后我收到了一封来自自称是“市场部经理”的人的回信:
到目前为止,我司还没有发生过,因为给新用户通过电子邮件发送密码,而引起的安全问题,而且据我所知,我本人网上注册的 90% 网站,也遵循着一样的流程。
这让我想起了国际石油和天然气公司(Oil and Gas International)的这条评论,是它在我的新 HTTPS 课程文章中给出的回复。现在当登录表单没有被安全加载时,Firefox 开始警告用户,而这让他们变得暴躁:
你方对于不安全的密码和/或登录的公告,会自动出现在本司(Oil and Gas International)的登录页面上,但并未得到我方的许可,请立即移除它。我方有自己的安全系统,并且超过 15 年来从未被攻破。你发出的公告引起了订阅者的关注,并对本司的业务造成了不良影响。
他们的网站,呃,在那之后不久就没法用了(SQL 注入风险可能没有帮到他们)。但网站现在又能用了,就是不清楚,是不是他们已经把时钟往前重置了整整 15 年。
(译注:SQL Injection,即 SQL 注入,就是通过把 SQL 命令插入到 Web 表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。)
虽然我们谈论的是无关紧要的安全意见,但英国天然气公司(British Gas)过去也遇到了一些困难:
(内容:@BritishGasHelp 不允许粘贴对于密码管理不是一个有效的举措,完全没有必要,而且很危险!
@passy 如果我们允许用户粘贴,我们将失去安全证书,这会让我们置身在暴力破解的危险中,不管怎样,谢谢你的提醒~ Steve)
当我们身处世界的一角时,很难忽视 Twitter 上像乐购(Tesco)这种大企业偶尔精神错乱的例子 :
(@troyhunt 请不要担心,您的密码正被安全地存储,它只在密码提醒邮件中显示,供您进行粘贴操作)
但是,你会说“嘿,安全密码重置很难!”不尽然,看看这个…
密码重置
一切是这样开始的:
(内容:@BetfairHelpdesk 那些使用用户名和生日登录的人,是不是应该都应该改改他们的密码?)
你原本可能会想:“哦,你的用户名是电子邮件地址,然后 Betfair 给你发了一封电子邮件,而你通过其中包含的特殊链接就能重置密码”,但现在你知道了,这种想法太想当然了。出乎意料的是,Betfair 实际上并没有相信 Paul 的说法,所以我做了个视频来解释一切。
【视频】:https://youtu.be/YjBBmfovL08
这是听上去的样子:如果你知道某人的电子邮件地址和生日,你就可以任意重置他的密码。但是,在双方交流的过程中,一定是哪里出错了,导致 Betfair 板起脸来,“好心地”提醒 Paul,如果他把电子邮件地址和生日告诉其他人,就违反了他们的条款。
(内容:@BetfairHelpdesk 你似乎是在回避问题:只需要用户名和生日就能更改密码,是这样的吗?
@psawers 是的,但是如果你告诉了别人这个信息,就违反了我们的条款)
你知道他们真正需要的是什么吗?安全问题…
安全问题
我在这儿举个例子:
(内容:这是我见过的最糟糕的安全问题)
什么?这个太一般了?那么试试这个:
我刚刚上的一个网站,它有个这样的安全问题:你祖母家的狗叫什么?
CAO!
这些安全问题真是疯了!我是说,这都是怎么想的?总体而言,要么采取不变的数据,比如你母亲的姓,或者可枚举的问题,比如你第一辆车的样子、你最喜欢的电影…在本文中,安全问题应该获得一席之地!现在让我们看看一些更为理智的东西…
登录
你知道登录过程中最难的一步是什么?密码。要是有更简单的方法就好了:
(内容:呃…玩真的吗?这简直蠢到了一种新高度)
你可能会想“它只是一条 tweet,不一定是真的”,但你错了,它就是真的,这是 archive.org 的快照:
(内容:输入手机号和密码快速登录,密码默认是手机号后四位)
在我们精神失常,说出“密码必须消失”这种话之前,还是要冷静一下,毕竟还没有人知道如何做到这一点!此外还有很多有帮助的技术解决方案,但没人真正想要使用它们,而事实是,为了规避技术问题,我们反而设置了更多的密码。但是,我还看到过更糟糕的…
物理安全
我觉得我找不到比这更荒谬的例子了,所以我把它放在这儿:
(内容:“100% 聚酯薄膜”双屏蔽 1.3c 级电缆,具有抗病毒保护功能,可减少病毒噪音,并获得完美的图像传输。)
你知道真正让我恼火的是什么吗?想想你那些不懂技术的朋友和亲戚,他们为了让 DVD 播放机与电视机一起工作,走进商店拿起两根 HDMI 线缆,然后翻到盒子背面,开始比较产品规格。当看到其中一根有抗病毒保护,而另一个根没有,你认为他们会选择哪根? !
现在,还有一件事…
账户枚举
我想把“最好的”东西留到最后讲。说它是最好的,是因为它仍然是一个随处可见、愚蠢的安全问,尽管愚蠢,但至少人们正在积极修复它:
(内容:我们马上要更换登录系统了,但同时,用户仍然可以使用我们的快速结账功能,敬请期待~)
这是距离本文八个月前的事了,那么这个愚蠢的安全问题究竟是什么?想象一下:你前往 Strawberrynet,扔掉了购物车里的一些香薰、爽肤水或其他什么,然后点击结账按钮。呈现在你面前的是:
(内容:请输入电子邮箱地址以结账)
你需要输入电子邮件地址,可以是网站上的任何邮件地址,之后,你就可以看到他人的个人资料了:
等等,这是什么鬼?!这是因为他们将个人数据与系统上的电子邮件地址进行了捆绑。而且由于这是世界上(访问量)最大的五千个网站之一,每天有许多人打开浏览,从而在网站中留下了很多的数据。你可以输入一个女性的名字(网站主要卖化妆品)再加上一个常见的电子邮箱后缀,之后就是惊喜啦!如果你认为这有点可怕,呵呵,这实际上正是网站的一个特色:
请注意,经过我们的调查,绝大多数用户都喜欢我们这个“不带密码”的系统。使用您的电子邮件地址作为密码已经足够安全了。
才怪,这根本不安全!我在八月写了篇列举网站精神错乱的文章,其中提到了他们早期的 tweet,但他们似乎完全无视这个问题。我甚至创建了一个帐户来检测它的工作原理:
好吧,我想我还需要再喝杯啤酒…
看完本文有收获?请转发分享给更多人
关注「程序员的那些事」,提升编程技能
淘口令:复制以下红色内容,再打开手淘即可购买
范品社,使用¥极客T恤¥抢先预览(长按复制整段文案,打开手机淘宝即可进入活动内容)
近期,北京地区正常发货,但派件时间有所延长