第 1章 PHP 项目安全概述01
1.1 PHP 项目安全形势不容乐观 01
1.2 PHP 项目安全问题产生的原因 03
1.3 PHP 项目安全原则 05
1.3.1 不可信原则 05
1.3.2 最小化原则 06
1.3.3 简单就是美 07
1.3.4 组件的安全 08
1.4 小结 09
第 2章 PHP 项目安全基础 10
2.1 信息屏蔽 10
2.1.1 屏蔽PHP 错误信息 10
2.1.2 防止版本号暴露 12
2.2 防止全局变量覆盖 15
2.3 使用PHP 的访问限制 16
2.3.1 文件系统限制 16
2.3.2 远程访问限制 17
2.3.3 开启安全模式 19
2.3.4 禁用危险函数 21
2.4 PHP 中的Cookie 安全 22
2.4.1 Cookie 的HttpOnly 23
2.4.2 Cookie 的Secure 23
2.4.3 指定Cookie 的使用范围 23
2.5 PHP 的安装与升级 24
2.5.1 尽量减少非必要模块加载 27
2.5.2 使用第三方安全扩展 27
2.6 小结 28
第3章 PHP 编码安全 29
3.1 弱数据类型安全 29
3.1.1 Hash 比较缺陷 30
3.1.2 bool 比较缺陷 32
3.1.3 数字转换比较缺陷 34
3.1.4 switch 比较缺陷 37
3.1.5 数组比较缺陷 38
3.2 PHP 代码执行漏洞 39
3.2.1 代码执行的函数 39
3.2.2 代码执行防御 43
3.3 PHP 变量安全 44
3.3.1 全局变量覆盖 44
3.3.2 动态变量覆盖 45
3.3.3 函数extract() 变量覆盖 47
3.3.4 函数import_request_variables() 变量覆盖 48
3.3.5 函数parse_str() 变量覆盖 49
3.4 URL 重定向安全 50
3.5 请求伪造攻击 52
3.5.1 服务器请求伪造 53
3.5.2 SSRF 漏洞的危害 53
3.5.3 在PHP 中容易引起SSRF 的函数 55
3.5.4 容易造成SSRF 的功能点 57
3.5.5 SSRF 漏洞防御 58
3.6 文件上传安全 62
3.6.1 文件上传漏洞的危害 62
3.6.2 文件上传漏洞 62
3.6.3 检查文件类型防止上传漏洞 64
3.6.4 检查文件扩展名称防止上传漏洞 66
3.6.5 文件上传漏洞的综合防护 67
3.7 避免反序列化漏洞 69
3.8 小结 71
第4章 PHP 项目中的常见漏洞与防护 72
4.1 SQL 注入漏洞 72
4.1.1 什么是SQL 注入 72
4.1.2 报错注入 74
4.1.3 普通注入 74
4.1.4 隐式类型注入 75
4.1.5 盲注 76
4.1.6 宽字节注入 77
4.1.7 二次解码注入 78
4.2 SQL 注入漏洞防护 79
4.2.1 MySQL 预编译处理 79
4.2.2 PHP 使用MySQL 的预编译处理 81
4.2.3 校验和过滤 83
4.2.4 宽字节注入防护 86
4.2.5 禁用魔术引号 87
4.3 XML 注入漏洞防护 87
4.4 邮件安全 87
4.4.1 邮件注入 88
4.4.2 防止邮件注入 89
4.5 PHP 组件漏洞防护 90
4.5.1 RSS 安全漏洞 90
4.5.2 PHPMailer 漏洞 91
4.5.3 OpenSSL 漏洞 92
4.5.4 SSL v2.0 协议漏洞 92
4.6 文件包含安全 93
4.6.1 文件包含漏洞 93
4.6.2 避免文件包含漏洞 97
4.7 系统命令注入 99
4.7.1 易发生命令注入的函数 99
4.7.2 防御命令注入 102
4.8 小结 103
第5章 PHP 与客户端交互安全 104
5.1 浏览器跨域安全 104
5.1.1 浏览器同源策略 104
5.1.2 浏览器跨域资源共享 106
5.1.3 JSONP 资源加载安全 108
5.2 XSS 漏洞防御 112
5.2.1 反射型XSS 113
5.2.2 存储型XSS 115
5.2.3 DOM 型XSS 116
5.2.4 通过编码过滤和转换进行防御 118
5.2.5 开启HttpOnly 防御XSS 122
5.2.6 对Cookie 进行IP 绑定 123
5.2.7 浏览器策略防御XSS 124
5.3 警惕浏览器绕过 126
5.4 跨站请求伪造防御 127
5.4.1 CSRF 请求过程 127
5.4.2 CSRF 防御方法 128
5.5 防止点击劫持 132
5.6 HTTP 响应拆分漏洞 133
5.7 会话攻击安全防御 136
5.7.1 会话泄露 136
5.7.2 会话劫持 138
5.7.3 会话固定 139
5.8 小结 140
第6章 PHP 与密码安全 141
6.1 用户密码安全 141
6.1.1 加密密码 141
6.1.2 密码加盐 142
6.1.3 定期修改 144
6.2 防止暴力破解 144
6.3 随机数安全 145
6.4 数字摘要 147
6.5 MAC 和HMAC 简介 148
6.6 对称加密 150
6.7 非对称加密 156
6.8 小结 157
第7章 PHP 项目安全进阶 158
7.1 单一入口 158
7.1.1 实现方式 158
7.1.2 单一入口更安全 159
7.2 项目部署安全 159
7.2.1 目录结构 160
7.2.2 目录权限 161
7.2.3 避免敏感配置硬编码 162
7.3 保障内容安全 163
7.3.1 不安全的HTTP 传输 164
7.3.2 HTTPS 传输更安全 166
7.3.3 HTTPS 证书未验证 168
7.3.4 防止盗链 168
7.3.5 敏感词 170
7.4 防止越权和权限控制 171
7.4.1 什么是越权访问 171
7.4.2 造成越权的原因 172
7.4.3 RBAC 控制模型 173
7.4.4 系统鉴权 174
7.4.5 系统隔离 175
7.5 API 接口访问安全 175
7.5.1 IP 白名单 176
7.5.2 摘要认证 177
7.5.3 OAuth 认证 178
7.6 防止接口重放 181
7.6.1 使用时间戳 181
7.6.2 使用Nonce 182
7.6.3 同时使用时间戳和Nonce 184
7.7 小结 186
第8章 PHP 业务逻辑安全 187
8.1 短信安全 187
8.1.1 短信的安全隐患 187
8.1.2 短信安全策略 188
8.2 敏感信息泄露 189
8.2.1 登录密码泄露 189
8.2.2 登录信息泄露 189
8.2.3 资源遍历泄露 189
8.2.4 物理路径泄露 190
8.2.5 程序使用版本泄露 191
8.2.6 JSON 劫持导致用户信息泄露 191
8.2.7 源代码泄露 192
8.3 人机识别策略 192
8.3.1 图片验证码 193
8.3.2 短信验证码 194
8.3.3 语音验证码 194
8.3.4 其他验证方式 196
8.4 常见业务流程安全 196
8.4.1 注册安全 196
8.4.2 登录安全 196
8.4.3 密码找回安全 198
8.4.4 修改密码安全 200
8.4.5 支付安全 201
8.5 其他业务安全 202
8.6 小结 203
第9章 应用软件安全204
9.1 应用指纹安全 204
9.2 服务器端口安全 205
9.3 Apache 的使用安全 208
9.3.1 运行安全 209
9.3.2 访问安全 210
9.3.3 隐藏Apache 版本号 210
9.3.4 目录和文件安全 211
9.3.5 防止目录遍历 212
9.3.6 日志配置 214
9.3.7 413 错误页面跨站脚本漏洞 216
9.3.8 上传目录限制 217
9.4 Nginx 的使用安全 217
9.4.1 运行安全 217
9.4.2 项目配置文件 218
9.4.3 日志配置 218
9.4.4 目录和文件安全 220
9.4.5 隐藏版本号 220
9.4.6 防止目录遍历 221
9.4.7 Nginx 文件类型错误解析漏洞 221
9.4.8 IP 访问限制 223
9.5 MySQL 的使用安全 224
9.5.1 运行安全 225
9.5.2 密码安全 226
9.5.3 账号安全 226
9.5.4 数据库安全 227
9.5.5 限制非授权IP 访问 228
9.5.6 文件读取安全 228
9.5.7 常用安全选项 229
9.5.8 数据安全 231
9.6 Redis 的使用安全 231
9.6.1 密码安全 231
9.6.2 IP 访问限制 232
9.6.3 运行安全 232
9.7 Memcache 的使用安全 233
9.7.1 IP 访问限制 233
9.7.2 使用SASL 验证 234
9.8 小结 237
第 10章 企业研发安全体系建设238
10.1 微软工程项目安全简介 238
10.2 OWASP 软件保障成熟度模型简介 239
10.3 建立合理的安全体系 239
10.3.1 制定安全规范标准 239
10.3.2 业务需求安全分析 240
10.3.3 编码过程安全 241
10.3.4 进行安全测试 241
10.3.5 线上安全 241
10.4 安全应急响应 241
10.5 小结 242
附录243
附录1 PHP 各版本漏洞 243
附录2 常见PHP 开源系统指纹 276
· · · · · · (
收起)