• API安全实战


    c7669bc4bcd3b4098461121199f18ab6.gif

    一提起“信息安全”,不管是业内专家还是所谓的“吃瓜群众”,多半都会在脑海中浮现“网络安全”“Web安全”“软件安全”“数据安全”等常见的词汇。市面上绝大多数安全类书籍也多集中在这几个领域,而从API视角阐释信息安全的资料却凤毛麟角,也很少有人从软件系统之间“接口”的角度来分析和挖掘安全漏洞。

    API最初的应用基本都在本地系统之上。时至今日,API已经成为各类软件系统(尤其是大型Web系统)集成的一种重要技术手段。随着Web API的不断普及,相应的协议(如SOAP)以及框架规范(REST)也随之产生。这些协议或框架规范通常会被设计为使用API来接收或发送消息,确保不同系统之间或不同编程语言之间能够共享信息和数据。随着前端设备的层出不穷(如手机、平板电脑、台式电脑等),必须有一种统一的机制,方便不同的前端设备与后端进行通信。这就使API架构流行起来,由此产生的安全问题也日益凸显。

    真正拿到本书的英文版时,我们很好奇作者能够从什么样的角度来诠释API安全,因为在我们看来,API安全的覆盖面实在太广,涉及加密、认证、授权、注入攻击、跨站请求伪造,等等。市面上能够涵盖这些内容的书籍资料一般多是“点到为止”,很少能做到“深入浅出”。

    3bd74db5bfba5ed70de84379d07e5332.pngb25093551aa3ea718353f89ed2b9705a.png

    扫码了解 ↑

    本书的作者凭借自身丰富的实战经验,让我们能够身临其境地看到当前Web系统中API技术所面临的弱点和所需要防御的方方面面。并且,随着阅读的深入,越来越多引人入胜的内容呈现在我们面前,详尽的问题阐述,各种安全威胁的介绍和防范方法,特别是针对当前最新的防御体系的深入剖析,都令我们获益匪浅。

    目录

    上拉下滑查看目录 ↓

    目  录

    译者序

    前言

    致谢

    关于本书

    关于作者

    第一部分 基础

    第1章 什么是API安全    2

    1.1 打个比方:参加驾照考试    3

    1.2 什么是API    4

    1.3 API安全上下文    6

    1.4 API安全要素    10

    1.4.1 资产    11

    1.4.2 安全目标    11

    1.4.3 环境与威胁模型    13

    1.5 安全机制    15

    1.5.1 加密    16

    1.5.2 身份识别和身份验证    17

    1.5.3 访问控制和授权    18

    1.5.4 审计日志    19

    1.5.5 速率限制    20

    小测验答案    21

    小结    21

    第2章 安全API开发    22

    2.1 Natter API    22

    2.1.1 Natter API概览    23

    2.1.2 功能实现概览    24

    2.1.3 设置项目    25

    2.1.4 初始化数据库    26

    2.2 开发REST API    28

    2.3 连接REST终端    31

    2.4 注入攻击    33

    2.4.1 防御注入攻击    37

    2.4.2 使用权限缓解SQL注入攻击    39

    2.5 输入验证    40

    2.6 生成安全的输出    45

    2.6.1 利用XSS攻击    47

    2.6.2 防御XSS攻击    49

    2.6.3 实施防护    50

    小测验答案    52

    小结    53

    第3章 加固Natter API    54

    3.1 使用安全控制来处置威胁    54

    3.2 速率限制解决可用性    55

    3.3 使用身份验证抵御欺骗    61

    3.3.1 HTTP基本身份验证    62

    3.3.2 使用Scrypt确保密码安全存储    62

    3.3.3 创建密码数据库    63

    3.3.4 在Natter API中注册用户    64

    3.3.5 验证用户    66

    3.4 使用加密确保数据不公开    68

    3.4.1 启用HTTPS    70

    3.4.2 加强数据传输安全    71

    3.5 使用审计日志问责    72

    3.6 访问控制    77

    3.6.1 强制身份验证    78

    3.6.2 访问控制列表    79

    3.6.3 Natter的强制访问控制    81

    3.6.4 Natter空间增加新成员    83

    3.6.5 避免提权攻击    84

    小测验答案    85

    小结    85

    第二部分 基于令牌的身份验证

    第4章 会话Cookie验证    88

    4.1 Web浏览器的身份验证    88

    4.1.1 在JavaScript中调用Natter API    89

    4.1.2 表单提交拦截    91

    4.1.3 提供同源HTML服务    91

    4.1.4 HTTP认证的缺点    94

    4.2 基于令牌的身份验证    95

    4.2.1 令牌存储抽象    97

    4.2.2 基于令牌登录的实现    98

    4.3 Session Cookie    100

    4.3.1 防范会话固定攻击    103

    4.3.2 Cookie安全属性    105

    4.3.3 验证会话Cookie    107

    4.4 防范跨站请求伪造攻击    109

    4.4.1 SameSite Cookie    111

    4.4.2 基于哈希计算的双重提交Cookie    113

    4.4.3 在Natter API中应用双重提交Cookie    116

    4.5 构建Natter登录UI    121

    4.6 实现注销    125

    小测验答案    127

    小结    127

    第5章 最新的基于令牌的身份验证    128

    5.1 使用CORS允许跨域请求    128

    5.1.1 预检请求    129

    5.1.2 CORS头    131

    5.1.3 在Natter API中添加CORS头部    132

    5.2 不使用Cookie的令牌    135

    5.2.1 在数据库中保存令牌的状态    136

    5.2.2 Bearer身份验证方案    141

    5.2.3 删除过期令牌    143

    5.2.4 在Web存储中存储令牌    143

    5.2.5 修改CORS过滤器    146

    5.2.6 对Web存储的XSS攻击    147

    5.3 加固数据库令牌存储    149

    5.3.1 对数据库令牌进行哈希计算    150

    5.3.2 使用HMAC验证令牌    151

    5.3.3 保护敏感属性    156

    小测验答案    158

    小结    159

    第6章 自包含令牌和JWT    160

    6.1 在客户端存储令牌状态    160

    6.2 JSON Web令牌    163

    6.2.1 标准JWT声明    165

    6.2.2 JOSE头部    166

    6.2.3 生成标准的JWT    168

    6.2.4 验证签名JWT    171

    6.3 加密敏感属性    172

    6.3.1 认证加密    173

    6.3.2 NaCl认证加密    175

    6.3.3 加密JWT    177

    6.3.4 使用JWT库    180

    6.4 使用安全类型来加固API设计    183

    6.5 处理令牌撤销    185

    小测验答案    189

    小结    189

    第三部分 授权

    第7章 OAuth2和OpenID Connect    192

    7.1 作用域令牌    193

    7.1.1 在Natter中添加作用域令牌    193

    7.1.2 作用域和权限之间的区别    197

    7.2 OAuth2简介    200

    7.2.1 客户端类型    201

    7.2.2 授权许可    201

    7.2.3 发现OAuth2终端    203

    7.3 授权码许可    204

    7.3.1 重定向不同类型客户端的URI    208

    7.3.2 使用PKCE增强授权码交换安全性    209

    7.3.3 刷新令牌    210

    7.4 验证访问令牌    211

    7.4.1 令牌自省    212

    7.4.2 确保HTTPS客户端配置安全    217

    7.4.3 令牌撤销    219

    7.4.4 JWT访问令牌    221

    7.4.5 加密JWT访问令牌    227

    7.4.6 让AS解密令牌    228

    7.5 单点登录    229

    7.6 OpenID Connect    230

    7.6.1 ID令牌    231

    7.6.2 加固OIDC    232

    7.6.3 向API传递ID令牌    233

    小测验答案    235

    小结    235

    第8章 基于身份的访问控制    237

    8.1 用户和组    237

    8.2 基于角色的访问控制    243

    8.2.1 角色映射权限    244

    8.2.2 静态角色    245

    8.2.3 确定用户角色    247

    8.2.4 动态角色    248

    8.3 基于属性的访问控制    249

    8.3.1 组合决策    251

    8.3.2 实现ABAC策略    252

    8.3.3 策略代理和API网关    256

    8.3.4 分布式策略实施和XACML    257

    8.3.5 ABAC最佳实践    258

    小测验答案    260

    小结    260

    第9章 基于能力的安全和Macaroon    261

    9.1 基于能力的安全    261

    9.2 能力和REST API    263

    9.2.1 能力URI    265

    9.2.2 在Natter API中使用能力URI    268

    9.2.3 HATEOAS    272

    9.2.4 基于浏览器客户端的能力URI    276

    9.2.5 能力与身份相结合    278

    9.2.6 加固能力URI    279

    9.3 Macaroon:含有caveat的令牌    282

    9.3.1 上下文caveat    284

    9.3.2 Macaroon令牌存储    285

    9.3.3 第一方caveat    288

    9.3.4 第三方caveat    291

    小测验答案    293

    小结    293

    第四部分 Kubernetes中的微服务API及服务到服务API的安全

    第10章 Kubernetes中的微服务API    296

    10.1 Kubernetes上的微服务API    297

    10.2 在Kubernetes上部署Natter API    300

    10.2.1 将H2数据库构建为Docker容器    301

    10.2.2 将数据库部署到Kubernetes    305

    10.2.3 将Natter API构建为Docker容器    309

    10.2.4 链接预览微服务    313

    10.2.5 部署新的微服务    315

    10.2.6 调用链接预览微服务    317

    10.2.7 防范SSRF攻击    320

    10.2.8 DNS重绑定攻击    325

    10.3 确保微服务通信安全    327

    10.3.1 使用TLS来保证通信安全    327

    10.3.2  使用TLS服务网格    329

    10.3.3 锁定网络连接    333

    10.4 确保输入请求的安全性    335

    小测验答案    339

    小结    339

    第11章 服务到服务API的安全    340

    11.1 API密钥和JWT Bearer身份验证    340

    11.2  OAuth2客户端凭证许可    342

    11.3  OAuth2的JWT Bearer许可    345

    11.3.1  客户端验证    346

    11.3.2  生成JWT    349

    11.3.3  服务账户身份验证    351

    11.4  Mutual TLS验证    352

    11.4.1  TLS证书认证的工作原理    352

    11.4.2  客户端证书验证    355

    11.4.3  验证客户端标识    356

    11.4.4  使用服务网格    361

    11.4.5  基于OAuth2的mTLS    363

    11.4.6  证书绑定访问令牌    364

    11.5  管理服务凭证    368

    11.5.1  Kubernets secret    369

    11.5.2  密钥和secret管理服务    373

    11.5.3 避免在磁盘上保存长生命周期的secret    376

    11.5.4  派生密钥    377

    11.6  响应用户请求的服务API调用    381

    11.6.1  phantom凭证模式    381

    11.6.2  OAuth2令牌交换    383

    小测验答案    386

    小结    387

    第五部分 用于物联网的API

    第12章 物联网通信安全    390

    12.1  传输层安全    391

    12.1.1  数据报TLS    392

    12.1.2  受限设备的密码套件    402

    12.2  预共享密钥    407

    12.2.1  实现一个PSK服务器    408

    12.2.2  PSK客户端    411

    12.2.3  支持原始PSK密码套件    412

    12.2.4  具有前向保密性的PSK    413

    12.3  端到端安全    415

    12.3.1  COSE    416

    12.3.2  COSE的替代方案    420

    12.3.3  防滥用认证加密    422

    12.4  密钥分发与管理    426

    12.4.1   一次性密钥配置    426

    12.4.2  密钥分发服务器    427

    12.4.3  前向保密Ratcheting技术    428

    12.4.4  后向安全    430

    小测验答案    432

    小结    432

    第13章 物联网API安全    433

    13.1  设备验证    433

    13.1.1  识别设备    433

    13.1.2  设备证书    436

    13.1.3  传输层验证    437

    13.2  端到端验证    440

    13.2.1  OSCORE    443

    13.2.2  REST API中避免消息重放    450

    13.3  受限环境下的OAuth2    455

    13.3.1  设备授权许可    455

    13.3.2  ACE-OAuth    459

    13.4  离线访问控制    460

    13.4.1  离线用户身份验证    460

    13.4.2  离线授权    462

    小测验答案    463

    小结    463

    附录A 配置Java和Maven    464

    附录B 配置Kubernets    473

    088f1627cf8ad046d509d2161f647913.jpeg

  • 相关阅读:
    java基于ssm+vue+elementui的水果生鲜销售购物商城
    vue开发游戏知识
    编译构建 meson ninja
    一文讲解Linux内核中的设计模式
    基于JAVA天津城建大学校友录管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    动物园(zoo)
    Linux安装CUDA & 添加环境变量 & 多版本CUDA切换 (软链接)
    细胞衰老β-半乳糖苷酶染色试剂盒丨艾美捷解决方案
    NISP和CISP中渗透测试的思路是什么?
    【示波器专题】数字示波器的主要指标——采样率
  • 原文地址:https://blog.csdn.net/hzbooks/article/details/126434392