具体描述
代码审计是企业安全运营以及安全从业者必备的基本技能。本书详细介绍代码审计的设计思路以及所需要的工具和方法,不仅用大量案例介绍了漏洞挖掘方法,而且在代码层和功能设计层剖析了各种安全漏洞的成因与预防策略。对应用开发人员和安全技术人员都有参考价值。
主要内容
·代码审计前的准备,包括代码审计前需要了解的PHP核心配置文件以及PHP环境搭建的方法。
·代码审计需要的工具,以及这些工具的详细使用方法。
·PHP代码审计中漏洞挖掘的思路与防范方法。
·常见漏洞的审计方法,涵盖SQL注入、XSS、CSRF、文件操作、代码/命令执行、变量覆盖、会话认证以及逻辑处理等等漏洞。
·二次漏洞的挖掘方法,以及代码审计过程中的一些常用技巧。
·介绍如何写出更安全的代码,包括参数的安全过滤、常用的加密算法、功能的安全设计、应用安全体系构建等。
作者简介
目录信息
前言 IV
导读 VI
致谢和感言 IX
目录 XI
第1章 代码审计环境搭建
1.1 wamp/wnmp环境搭建
1.2 lamp/lnmp环境搭建
1.3 PHP核心配置详解
第2章 审计辅助与漏洞验证工具
2.1 代码编辑器
2.1.1 notepad++
2.1.2 UltraEdit
2.1.3 Zend Studio
2.2 代码审计工具
2.2.1 Seay源码审计系统
2.2.2 Fortify SCA
2.2.3 RIPS
2.3 漏洞验证辅助
2.3.1 burp suite
2.3.2 浏览器扩展
2.3.3 编码转换及加解密工具
2.3.4 正则调试工具
2.3.5 SQL执行监控工具
第3章 通用代码审计思路
3.1 敏感函数回溯参数过程
3.1.1 espcms注入挖掘案例
3.2 通读全文代码
3.2.1 骑士cms通读审计案例
3.2.1.1 查看应用文件结构
3.2.1.2 查看关键文件代码
3.2.1.3 查看配置文件
3.2.1.4 跟读首页文件
3.3 根据功能点定向审计
3.3.1 Bugfree重装漏洞案例
第4章 漏洞挖掘与防范(基础篇)
4.1 SQL注入漏洞
4.1.1 挖掘经验
4.1.1.1 普通注入
4.1.1.2 编码注入
4.1.1.2.1 宽字节注入
4.1.1.2.2 二次urldecode注入
4.1.1.3 espcms搜索注入分析
4.1.2 漏洞防范
4.1.2.1 gpc/rutime魔术引号
4.1.2.2 过滤函数和类
4.1.2.2.1 addslashes函数
4.1.2.2.2 mysql_[real_]escape_string函数
4.1.2.2.3 intval等字符转换
4.1.2.3 PDO prepare预编译
4.2 XSS漏洞
4.2.1 挖掘经验
4.2.1.1 反射型XSS
4.2.1.2 存储型XSS
4.2.1.3 骑士CMS 存储型XSS分析
4.2.2 漏洞防范
4.2.2.1 特殊字符HTML实体转码
4.2.2.2 标签事件属性黑白名单
4.3 CSRF漏洞
4.3.1 挖掘经验
4.3.1.1 Discuz csrf备份拖库分析
4.3.2 漏洞防范
4.3.2.1 Token验证
4.3.2.2 验证码验证
第5章 漏洞挖掘与防范(进阶篇)
5.1 文件操作漏洞
5.1.1 文件包含漏洞
5.1.1.1 挖掘经验
5.1.1.2 本地文件包含
5.1.1.2.1 远程文件包含
5.1.1.2.2 文件包含截断
5.1.1.2.3 Metinfo文件包含漏洞分析
5.1.2 文件读取(下载)漏洞
5.1.2.1 挖掘经验
5.1.2.1.1 phpcms任意文件读取分析
5.1.3 文件上传漏洞
5.1.3.1 挖掘经验
5.1.3.1.1 未过滤或本地过滤
5.1.3.1.2 黑名单扩展名过滤
5.1.3.1.3 文件头、content-type验证绕过
5.1.3.1.4 phpcms任意文件上传分析
5.1.4 文件删除漏洞
5.1.4.1 挖掘经验
5.1.4.1.1 Metinfo任意文件删除分析
5.1.5 文件操作漏洞防范
5.1.5.1 通用文件操作防御
5.1.5.2 文件上传漏洞防范
5.2 代码执行漏洞
5.2.1 挖掘经验
5.2.1.1 代码执行函数
5.2.1.1.1 eval和assert函数
5.2.1.1.2 preg_replace函数
5.2.1.1.3 调用函数过滤不严
5.2.1.2 动态函数执行
5.2.1.3 Thinkphp代码执行漏洞分析
5.2.2 漏洞防范
5.3 命令执行漏洞
5.3.1 挖掘经验
5.3.1.1 命令执行函数
5.3.1.2 反引号命令执行
5.3.1.3 亿邮命令执行漏洞分析
5.3.2 漏洞防范
5.3.2.1 命令防注入函数
5.3.2.2 参数白名单
第6章 漏洞挖掘与防范(深入篇)
6.1 变量覆盖漏洞
6.1.1 挖掘经验
6.1.1.1 函数使用不当
6.1.1.1.1 extract函数
6.1.1.1.2 parse_str函数
6.1.1.1.3 import_request_variables函数
6.1.1.2 $$变量覆盖
6.1.1.3 Metinfo变量覆盖漏洞分析
6.1.2 漏洞防范
6.1.2.1 使用原始变量
6.1.2.2 验证变量存在
6.2 逻辑处理漏洞
6.2.1 挖掘经验
6.2.1.1 等于与存在判断绕过
6.2.1.1.1 in_array函数
6.2.1.1.2 is_numeric函数
6.2.1.1.3 双等于和三等于
6.2.1.2 账户体系中的越权漏洞
6.2.1.3 未exit或return引发的安全问题
6.2.1.4 常见支付漏洞
6.2.1.5 Ecshop逻辑错误注入分析
6.2.2 漏洞防范
6.3 会话认证漏洞
6.3.1 挖掘经验
6.3.1.1 Cookie认证安全
6.3.1.2 Espcms任意用户登录分析
6.3.2 漏洞防范
第7章 二次漏洞审计
7.1 什么是二次漏洞
7.2 二次漏洞审计技巧
7.3 dedecms二次注入漏洞分析
第8章 代码审计小技巧
8.1 钻GPC等转义的空子
8.1.1 不受GPC保护的全局变量
8.1.2 编码转换问题
8.2 神奇的字符串
8.2.1 字符处理函数报错信息泄露
8.2.2 字符串截断
8.2.2.1 %00空字符截断
8.2.2.2 iconv函数字符编码转换截断
8.3 php:// 输入输出流
8.4 PHP代码解析标签
8.5 FUZZ漏洞发现
8.6 不严谨的正则表达式
8.7 十余种MySQL报错注入
8.8 Windows FindFirstFile利用
8.9 PHP可变变量
第9章 参数的安全过滤
9.1 第三方过滤函数与类
9.1.1 discuz SQL安全过滤类分析
9.1.2 discuz xss标签过滤函数分析
9.2 内置过滤函数
第10章 使用安全的加密算法
10.1 对称加密
10.1.1 3DES加密
10.1.2 AES加密
10.2 非对称加密
10.2.1 RSA加密
10.3 单向加密
10.3.1 md5/sha1加密
第11章 业务功能安全设计
11.1 验证码
11.1.1 验证码绕过
11.1.2 验证码资源滥用
11.2 用户登录
11.2.1 撞库漏洞
11.2.2 API登录
11.3 用户注册
11.4 密码找回
11.5 资料查看与修改
11.6 投票/积分/抽奖
11.7 充值支付
11.8 私信及反馈
11.9 远程地址访问
11.10 文件管理
11.11 数据库管理
11.12 命令/代码执行
11.13 文件/数据库备份
11.14 API接口
第12章 应用安全体系建设
12.1 用户密码安全策略
12.2 前后台用户分表
12.3 后台地址隐藏
12.4 密码加密存储方式
12.5 登入限制
12.6 API站库分离
12.7 慎用第三方服务
12.8 严格的权限控制
12.9 敏感操作多因素验证
12.10 应用自身的安全中心
附录
网站推荐
· · · · · · (收起)
读后感
用户评价
与其他同类书籍相比,这部作品在“审计方法论的迭代与演进”这一块的处理显得尤为深刻和具有前瞻性。它不仅仅满足于介绍当前主流的静态分析(SAST)和动态分析(DAST)技术,而是将重点放在了如何构建一个可持续、可扩展的内部审计框架上。作者非常细致地分解了构建一个有效“威胁建模流程”所需的具体步骤,从业务流程图的绘制到安全需求的反向推导,逻辑链条环环相扣。我个人认为,最能体现本书价值的是它关于“误报处理与优先级排序”的实践指南。在实际工作中,我们常被海量的低优先级警告淹没,真正关键的问题反而被淹没在噪音之中。这本书提供了一套基于风险评分和业务影响分析的实用过滤体系,帮助团队将有限的资源聚焦于最可能被利用的薄弱环节。这种对“效率”和“效果”的平衡追求,使得这本书不仅仅是技术人员的案头宝典,更是安全团队管理者制定策略时的重要参考依据。
这部书简直是为我这种常年与复杂系统打交道的程序员量身定做的“救命稻草”。我记得我刚翻开它的时候,还抱着一丝怀疑,毕竟市面上关于“安全”的书籍浩如烟海,大多晦涩难懂,或者过于侧重理论而缺乏实战指导。但这本书的开篇就抓住了我的注意力,它没有直接跳入那些令人头皮发麻的漏洞列表,而是从一个更宏观的角度——“代码的生命周期与安全风险的内在关联”——进行了阐述。作者的叙事逻辑非常清晰,仿佛一位经验丰富的老前辈在手把手地教你如何“看透”代码的本质。我特别欣赏其中关于“隐性依赖与数据流追踪”的那几个章节,它用生动的案例解析了如何从一个不起眼的函数调用链中,挖出可能导致严重后果的逻辑缺陷。读完这部分,我感觉自己看待代码的视角彻底变了,不再仅仅关注功能是否实现,而是开始本能地搜索那些“不该出现”的边界条件和权限提升的可能性。这本书真正做到了理论指导与实践操作的完美结合,每一个技巧的引入都伴随着可以直接在当前项目中复现的调试流程和分析模板,这对于我们日常的Code Review工作效率提升是质的飞跃。
说实话,我原本以为这会是一本非常枯燥的技术手册,可能充斥着各种RFC文档的引用和难以理解的专业术语堆砌。然而,阅读体验出乎意料地流畅且富有启发性。作者在处理那些高危漏洞(比如经典的注入和跨站脚本)时,没有采用那种老生常谈的“这里错了,那里该如何修改”的简单模式。相反,他深入探讨了为什么这些漏洞会在不同的语言和框架中以“变种”的形式反复出现,并且引入了“安全思维模型”的概念。这一点对我触动极大,它迫使我跳出IDE的限制,去思考编写代码时的安全心智模型是否足够健全。书中对于特定编程范式下的安全陷阱分析,简直是教科书级别的精彩。比如,在描述如何处理异步回调中的竞争条件时,作者构建了一个精巧的模拟场景,让读者亲身体验到如果不加锁或者不使用原子操作,系统在并发压力下会如何瞬间崩溃或被恶意利用。这种沉浸式的学习方式,远比单纯背诵OWASP Top 10来得有效和深刻。它培养的不是解决已知问题的能力,而是预见和规避未知风险的直觉。
作为一名主要负责后端服务架构的工程师,我对性能和健壮性有着近乎偏执的要求,所以我通常对偏重于前端安全或特定框架安全详述的书籍兴趣不大。但是这部作品的广度和深度完全超出了我的预期。最让我惊喜的是,它花了相当大的篇幅讨论了“配置安全”和“基础设施即代码(IaC)的安全加固”。在如今微服务和容器化大行其道的背景下,代码本身的安全性固然重要,但配置文件的疏漏往往是更隐蔽的入口。书中对Terraform和Ansible脚本中常见的权限配置错误、秘密信息硬编码的审查方法进行了详尽的剖析,并提供了针对性的自动化脚本模板来辅助审计工作。这部分内容极其宝贵,因为它拓宽了“代码审计”的定义,将其从单纯的代码文本分析,扩展到了整个部署环境的安全画像构建。我甚至据此优化了我团队内部持续集成流程中的一个安全门禁步骤,效果立竿见影,大大减少了因环境配置不当导致的生产事故。
我是一个偏爱阅读具有强烈个人风格和论证色彩的专业书籍的读者。这部作品在结构编排上,给我带来了一种非常扎实的阅读满足感。它不是那种冷冰冰的工具书,而是带着强烈的作者的“经验之谈”色彩。尤其是在讨论“遗留系统重构中的安全债务清理”这一章节时,作者引用了好几个真实世界的案例,描述了团队在面对一个数百万行代码、文档缺失的旧系统时,如何一步步通过定点突破,逐步剥离和修复那些被时间掩盖的深层安全漏洞。这种叙事方式,让读者感觉自己不是在学习理论,而是在跟随一位资深顾问进行实地诊断。书中关于“污点分析工具的局限性与人工干预的必要性”的论述,尤其精辟。它旗帜鲜明地指出了过度依赖自动化扫描器的弊端,强调了人类对业务逻辑理解的不可替代性,这对于我们这些经常与自动化报告打交道的安全人员来说,无疑是一剂清醒剂,提醒我们不能盲目相信工具的“绿灯”。
这是一本关于web安全漏洞挖掘和代码设计实战的书,冠以代码审计范围有点宽,偏向于技术操作,审计管理涉及不足。
比较入门,适合有点PHP基础
php代码审计、漏洞挖掘与编码安全入门书。
整理挺全的,不过不够深入。
了解下通用知识