说说如何设计安全的应用密码

web 应用最常见的认证方式就是通过用户名与密码进行认证。

1 区分认证与授权

首先我们要区分清楚认证与授权。认证(Authentication) 是为了认出用户的身份;而授权(Authorization )则是为了决定该身份的用户能够做什么 。

认证实际上是一个验证凭证的过程 。 如果只有一个凭证被用于认证 , 则称为 “ 单因素认证 ”; 如果有两个及以上的凭证被用于认证 , 则称为 “ 多因素认证 ”。 多因素认证的安全性会高于单因素认证 , 但会影响用户体验。

2 密码

密码认证的优点是:使用成本低 , 因为认证过程实现起来很简单 ; 缺点是:密码可能会被猜解 。

2.1 密码强度

这里引用 OWASP 推荐的一些最佳实践并结合实际应用,从以下几个维度来说明密码强度:

(1) 密码长度

  • 普通应用,密码长度为 6 位以上;
  • 重要应用,密码长度为 8 位以上 , 并考虑使用多因素认证 。

(2) 密码复杂度

  • 密码区分大小写字母;
  • 密码为大写字母 、小写字母 、数字以及特殊符号中,两种以上的组合;
  • 不能是连续性的字符 , 比如 1234abcd,因为这种顺着人的思维方式,很容易被猜解;
  • 尽量避免出现重复的字符 , 比如 33331。

(3) 密码来源

不要使用我们的公开数据 , 或者是与个人隐私相关的数据作为密码 。 比如微信号、 QQ 号 、 身份证号码 、 昵称 、 电话号码、手机号码 、 生日 、 英文名 、 公司名等作为密码 , 因为这些资料往往可以从互联网上获得,所以不安全。

2.2 弱密码库清单

互联网上有许多弱密码库清单可供下载。我们可以找一份比较全的弱密码库清单。如果用户使用的密码包含在这份列表中 , 就提示该用户密码不安全,并弹出密码修改链接。

弱密码之所以可怕,是因为黑客会选择一些弱密码进行暴力破解 , 比如使用经典的弱密码 “123456”,然后不断猜解用户名 , 直到发现一个使用该弱弱密码的账户为止 。由于用户名往往是公开的信息 ,所以黑客会收集一份用户名清单 , 利用这份清单进行暴力破解,这种攻击成本非常低 , 但效果却比暴力破解密码要好很多。

2.3 密码保存方式

一般来说 , 密码必须以不可逆的加密算法 , 或单向散列函数算法 , 加密后存储在数据库中 。 这样做的目的是:尽最大可能来保障密码的安全。因为即便是 DBA , 也不能够知道用户的明文密码。所以即使黑客入侵了网站数据库 , 也无法获取用户的实际密码。

2011 年 12 月 , 国内最大的开发者社区 CSDN 的数据库被黑客公布在网上 。 因为 CSDN 将用户的密码明文保存在数据库中 , 从而导致 600 万 的 CSDN 用户密码发生泄露!

目前业界比较普遍的做法是:在用户注册时将明文密码经过哈希后 ( 比如 MD5 或者 SHA-1) 再保存到数据库中;用户登录时,只需要验证用户提交的 “ 密码字符串 ” 哈希值 , 与保存在数据库中的 “ 密码密文 ” 哈希值是否一致即可。

因为 MD5 最流行,所以黑客使用一种叫做 “ 彩虹表 ( Rainbow Table)” 的破解 MD5 密码的方法。该方法会尽可能多地收集密码的明文与明文对应的 MD5 值 。程序还可以周期性地计算一些数据的 MD5 值 , 以扩充彩虹表的内容 。这样只需要查询 MD5 值 , 就能找到该 MDS 值对应的明文! 一个好的彩虹表 , 会非常庞大,甚至达到万亿条记录!

网上也有很多在线工具,可以提供 MD5 破解服务:

为了避免密码密文(哈希值)发生泄露后 , 黑客能够通过彩虹表查询出密码明文的情况发生,我们在计算密码明文的哈希值时 , 可以增加一个 “Salt ”。“Salt"” 是一个随机生成的字符串 , 它的作用是为了增加明文的复杂度 , 这种方法会使黑客通过彩虹表攻击失效 。Salt 可以这样使用:

  • MD5(Password+Salt )
  • MD5(Username+Password+Salt )
  • MD5(MD5(Username+Password+Salt ))

计算公式越复杂,生成的密文越安全。

Salt 一般保存在服务器端的配置文件中 , 注意:一定要妥善保管。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,113评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,644评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,340评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,449评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,445评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,166评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,442评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,105评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,601评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,066评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,161评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,792评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,351评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,352评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,584评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,618评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,916评论 2 344

推荐阅读更多精彩内容