参考:《Web 开发的身份数据和安全》
主要内容:
- 了解 Web 和应用安全的现状。
- 构建安全的加密方式、以及与各种密码攻击媒介斗争。
- 创建数字指纹,在浏览器、设备和配对设备中识别用户。
- 通过 OAuth 和 OpenID Connect 构建安全的数据传输系统。
- 使用其他的识别方法提供第二种身份验证方式。
- 加固 Web 应用,防止攻击。
- 使用 SSL/TLS 及同步和异步加密创建安全的数据传输系统。
导论
1. 关于安全,你需要觉醒的是
对系统,公司或应用最重要的投资之一是安全和身份基础设施。
但是保护数据没有万无一失的安全方法。身份和数据安全的要务是降低风险、保护严守的数据,当不幸发生时,留出足够的时间采取行动,减少损失。
2. 现有安全模型的问题
-
不是技术跟不上潜在的攻击媒介的发展步伐,而是开发方式的选择导致系统变得薄弱。
-
错误的思想:
- 你以为用户始终会选择最安全的方案(如:强密码、双因素身份验证),实际上用户更愿意选择最简单的方案。
- 为了确保系统安全,不惜牺牲可用性。
- 安全措施绝不会遭到破坏。
-
强密码:不管系统的体量有多大,都始终应该假设数据库的安全措施有可能被攻破,导致数据被盗取。一切敏感的信息都应该妥善加密。
-
可用性和安全性一定要适当平衡。
-
数据加密:数据不是为了防止数据被盗,而是要拖慢黑客的步伐,让他们在短时间内无法解密大量数据,或者拖延时间,以便采取必要的行动。
-
最薄弱的环节,人类:双因素身份认证、密码疲劳。
解决“密码疲劳”问题:
- 苹果(Apple)系统的密码管理应用:Keychain。
- 应用:1Password、Dashlane、LastPass。
增强用户体验并提升密码强度的三个方式:
- 显示密码规则;
- 显示用户输入;
- 显示强度表;
-
单点登录(single sign-on,SSO):OpenID、OAuth 1.0、OAuth 2.0、OpenID Connect。
3. 理解密码安全中的熵
- 判断密码强度的标准机制——信息熵。
- 信息熵的衡量方式:源(如密码)中信息的比特数。通常认为,熵至少为 36.86 比特的密码才是好密码。
- 衡量密码熵的几个关键特征:所用的符号集、符号集通过大小写字符所做的扩充、密码长度。
- 作用:预测通过猜测、字典攻击、暴力攻击等手段破解密码的难度。
- 生成密码的方式:1. 随机生成。2. 人为设置。
- 因为人类创建的密码难以确定安全性,所以 Web 开发时,通常:
- 要求用户在创建密码时提高密码的强度。
- 默默在背后尽自己所能提升数据的安全性(如:加密、限制尝试登录次数)。
4. 区分用户名和密码在系统中的作用
- 用户名(或公钥)用于认证用户的身份。
- 密码(或私钥)则以只有用户自己知道的方式证明用户的身份。
- 身份验证的两种方式:1. 增强系统。2. 删除用户名和密码。
5. 好的和不好的安全算法(对密码而言)
⚠️ 注意:这边的“好”与“不好”指的是对密码进行哈希加密而言。
在保护数据和受限的用户信息方面,不是所有的加密算法都具有同等效果。
两种哈希加密算法:
- 追求快速度的算法,用于快速而准确地加密和解密大量数据。
- 故意放慢速度的算法,防止暴力破解,用于保护密码。

6. 应该保护哪些数据?
任何能认证身份的信息(身份数据、个人信息、支付详情),以及那些对系统至关重要,公开后可能导致架构出现漏洞的信息。
7. 账户恢复机制还需要考虑到社会工程的影响
- 安全问题的设置重复、搞怪、不易回答、难以记住。(如:小时候我喜欢吃什么菜?你最喜欢读哪本书?)。
网友评论