前言 1
第1章 导论 7
现有安全模型的问题 7
弱密码 8
为了安全牺牲可用性 9
不当的数据加密 10
最薄弱的环节:人类 11
单点登录 12
理解密码安全中的熵 13
随机选择的密码熵 14
人为选定的密码熵 15
区分用户名和密码在系统中的作用 17
保护身份的当前标准 18
好的和不好的安全算法 18
应该保护哪些数据? 20
账户恢复机制和社会工程 20
安全问题带来的问题 20
下一步 21
第2章 密码加密、哈希和加盐 22
静态数据和动态数据 22
静态数据 22
动态数据 24
密码攻击媒介 24
暴力攻击 26
使用reCAPTCHA添加验证码 27
字典攻击 33
反向查询表 34
彩虹表 35
加盐 37
生成随机盐值 38
重用盐值 39
盐值的长度 39
把盐值存储在哪里 39
撒胡椒 40
选择正确的密码哈希函数 41
bcrypt 41
PBKDF2 43
scrypt 44
对比哈希值,验证密码 46
密钥延伸 47
重新计算哈希值 48
下一步 48
第3章 身份安全基础知识 49
理解不同的身份类型 49
社会身份 50
实际身份 50
弱身份 51
利用身份提升用户体验 51
信任区简介 52
浏览器指纹识别 53
阻碍浏览器指纹识别的配置 54
可识别的浏览器信息 55
获取浏览器细节 56
位置追踪 58
设备指纹识别(手机/平板) 61
设备指纹识别(蓝牙配对设备) 62
实现身份 63
第4章 通过OAuth 2和OpenID Connect实现安全的登录 64
身份验证和授权之间的区别 64
身份验证 64
授权 65
OAuth和OpenID Connect是什么 65
OAuth 2.0简介 68
使用OAuth 2.0处理授权 70
OAuth 2.0权限核发类型 72
使用Bearer Token 73
使用OpenID Connect授权和验证身份 73
OAuth 2和OAuth 1.0a之间的安全注意事项 75
构建一个OAuth 2.0服务器 75
创建Express应用 76
设置服务器的数据库 76
生成授权码和令牌 77
ES5中Math.random()函数的官方文档 79
授权端点 80
处理令牌的存活期 83
处理资源请求 87
使用刷新令牌 89
处理错误 90
为服务器添加OpenID Connect功能 94
ID令牌模式 95
修改授权端点 96
调整令牌端点 97
userinfo端点 99
使用OpenID Connect管理会话 99
构建OAuth 2客户端 100
使用授权码 100
使用资源属主凭据或客户端凭据授权 103
为客户端添加OpenID Connect功能 105
OpenID Connect基本流程 105
OAuth 2.0和OpenID Connect之外 107
第5章 身份认证的其他方法 108
设备和浏览器指纹识别 108
双因素身份验证和n因素身份验证 109
n因素身份验证 109
一次性密码 110
使用Authy实现双因素身份验证 113
使用生物特征代替密码 120
如何评价生物特征的效果 121
面部识别 121
视网膜和虹膜扫描 122
静脉识别 123
新出现的标准 123
FIDO Alliance 123
Oz 126
区块链 126
小结 127
第6章 增强Web应用的安全 128
保护会话 128
会话的种类 129
Express处理会话的方式 130
使用SHA-2保护密码 131
处理XSS 134
XSS攻击的三种类型 134
测试XSS保护机制 135
小结 140
CSRF攻击 140
使用csurf处理CSRF 140
有用的Node资源 141
Lusca 142
Helmet 142
Node安全项目 143
其他减轻危害的技术 144
小结 145
第7章 数据传输安全 147
SSL/TLS 147
证书验证类型和权威机构 149
创建供测试的自签名证书 151
异步加密 159
用例 159
具体示例 161
异步加密的优缺点和用途 167
同步加密 168
初始向量 169
填充 170
分组加密的操作模式 172
使用CTR加密模式的AES 174
使用GCM验证加密模式的AES 177
同步加密的优缺点和用途 179
附录A GitHub仓库 181
附录B 技术前提条件和要求 183
词汇表 191