注册 | 登录读书好,好读书,读好书!
读书网-DuShu.com
当前位置: 首页出版图书科学技术计算机/网络软件与程序设计程序设计综合安全编程代码静态分析

安全编程代码静态分析

安全编程代码静态分析

定 价:¥56.00

作 者: (美国)Brian Chess、(美国)Jacob West 著;董启雄、韩平 译
出版社: 机械工业出版社
丛编项: 华章程序员书库
标 签: 程序设计

购买这本书可以去


ISBN: 9787111233213 出版时间: 2008-03-01 包装: 平装
开本: 16 页数: 362 pages 字数:  

内容简介

  创建安全的代码,仅有好的意图是远远不够的。程序员要知道:他们的代码几乎需要在各种使用环境和各种配置之下都是安全的。静态源代码分析为用户提供了使用优秀的工具来审查其工作的能力,从而找出各类可直接导致安全漏洞的错误。现在,本书提供了一份关于静态分析的完整指导:如何进行静态分析,如何将其集成到软件开发过程以及如何在代码安全审查期间最大化其功效等。静态分析专家Brian Chess和Jacob West探讨了当前最为常见的安全缺陷类型。他们使用来自实际安全事件的Java和C代码实例阐明了:如何发现编码错误,如何防止出现编码错误以及如何通过静态分析来快速找出类似的错误。本书读者对象是所有关注构建更加安全的软件的人:软件开发人员、软件安全工程师、软件分析师以及软件测试人员。本书内容包括:■ 为什么常规的Bug捕获技术经常找不出安全问题。■ 怎样才能通过静态分析帮助程序员做好安全工作。■ 决定一个静态分析工具成败的关键属性和算法。■ 提高代码静态分析效率的36种技术。■ 70多种严重安全漏洞及其详细解决方案。■ 来自FireFox、OpenSSH、MySpace、eTrade、Apache httpd以及其他■ 更多软件的漏洞实例。■ 处理非可信输入的技术。■ 消除缓冲区溢出的战术和战略方法。■ 避免出现Web应用程序、Web 服务以及Ajax相关的错误。■ 关注安全的日志技术、调试技术以及错误/异常处理技术。■ 秘密和机密信息的创建、维护和共享。■ 带你穿越静态分析的详尽过程。

作者简介

  Brian Chess是Fortify Software公司的创始人和首席科学家,他的研究重点是用于创建安全系统的实用方法。他在圣克鲁兹的加帅l大学(University of California)获得计算机工程博士学位,在那里他研究在代码中查找安全相关缺陷问题的静态分析。

图书目录

r>第一部分  软件安全和静态分析
第1章  软件安全问题
   1.1  仅有防御性编程还不够
   1.2  安全功能≠安全的功能
   1.3  质量的误区
   1.4  软件开发全局中的静态分析
   1.5  漏洞分类
     1.5.1 种有害的领域
     1.5.2  “7种有害的领域”与“OWASP前10名”
   1.6  小结
第2章  静态分析简介
   2.1  静态分析的能力和局限性
   2.2  通过静态分析解决问题
     2.2.1  类型检查
     2.2.2  风格检查
     2.2.3  程序理解
     2.2.4  程序验证和属性检查
     2.2.5  Bug查找
     2.2.6  安全审查
   2.3  一点理论,一点实际
     2.3.1  成功准则
     2.3.2  分析源代码与分析编译后的代码
   2.4  小结
第3章  作为代码审查过程组成部分的静态分析
   3.1  执行代码审查
     3.1.1  代码审查周期
     3.1.2  避开可利用性陷阱
   3.2  将安全审查加入到现有的开发过程中
     3.2.1  采用工具的疑虑
     3.2.2  小处着手,循序渐进
   3.3  静态分析度量标准
   3.4  小结
第4章  静态分析技术内幕
   4.1  建模
     4.1.1  词法分析
     4.1.2  解析
     4.1.3  抽象语法
     4.1.4  语义分析
     4.1.5  跟踪控制流
     4.1.6  跟踪数据流
     4.1.7  污染传播
     4.1.8  指针别名歧义
   4.2  分析算法
     4.2.1  断言检查
     4.2.2  单纯本地分析
     4.2.3  本地分析方法
     4.2.4  全局分析
     4.2.5  研究性的工具
   4.3  规则
     4.3.1  规则格式
     4.3.2  用于污染传播的规则
     4.3.3  本书中讨论的规则
   4.4  报告结果
     4.4.1  结果的分组和分类
     4.4.2  消除非预期的结果
     4.4.3  解释结果的意义
   4.5  小结
第二部分  常见问题
第5章  处理输入
   5.1  验证内容
     5.1.1  验证所有输入
     5.1.2  验证各种来源的输入
     5.1.3  建立可信边界
   5.2  如何进行验证
     5.2.1  使用强输入验证
     5.2.2  避免黑名单法
     5.2.3  不要混淆可用性和安全性
     5.2.4  拒绝不良数据
     5.2.5  默认执行正确的输入验证
     5.2.6  检验输入的长度
     5.2.7  限制数值输入
   5.3  防止元字符攻击
     5.3.1  使用参数化请求
     5.3.2  路径操纵
     5.3.3  命令注入
     5.3.4  日志欺骗
   5.4  小结
第6章  缓冲区溢出
   6.1  缓冲区溢出简介
     6.1.1  利用缓冲区溢出漏洞
     6.1.2  缓冲区分配策略
     6.1.3  跟踪缓冲区大小
   6.2  字符串
     6.2.1  天生危险的函数
     6.2.2  有界字符串操作
     6.2.3  有界函数的常见缺陷
     6.2.4  保留Null终止符
     6.2.5  字符集、表达式和编码
     6.2.6  格式串
     6.2.7  更完善的字符串类和类库
   6.3  小结
第7章  缓冲区溢出伴随的问题
   7.1  整数
     7.1.1  回绕错误
     7.1.2  截断和符号位扩展
     7.1.3  有符号数和无符号数之间的转换
     7.1.4  检测和防止整数溢出的方法
   7.2  运行时保护
     7.2.1  更安全的编程语言
     7.2.2  更安全的C语言
     7.2.3  动态缓冲区溢出保护
     7.2.4  动态保护基准结果
   7.3  小结
第8章  错误和异常
   8.1  利用返回代码处理错误
     8.1.1  检查C语言中的返回值
     8.1.2  检查Java中的返回值
   8.2  管理异常
     8.2.1  捕获顶层的任何东西
     8.2.2  消失的异常
     8.2.3  只捕获需要处理的异常
     8.2.4  控制已检测的异常
   8.3  防止资源泄露
     8.3.1  C和C++
     8.3.2  Java
   8.4  日志记录和调试
     8.4.1  集中日志记录
     8.4.2  在最终代码中不包含调试帮助和“后门”访问代码
     8.4.3  清除备份文件
     8.4.4  不要容忍“复活节彩蛋”
   8.5  小结
第三部分  特性与特色
第9章  Web应用程序
   9.1  用于Web的输入和输出验证
     9.1.1  预料到浏览器已遭到破坏
     9.1.2  认为浏览器是一种一览无余的事物
     9.1.3  保护浏览器免受恶意内容的攻击
   9.2  HTTP考虑
     9.2.1  使用POST,而不是GET
     9.2.2  请求顺序
     9.2.3  错误处理
     9.2.4  请求出处
   9.3  维护会话状态
     9.3.1  使用强用户会话标识符
     9.3.2  强制会话空闲超时和最大会话持续时间
     9.3.3  在认证的基础上开始一个新的会话
   9.4  为输入验证使用Struts架构
     9.4.1  建立Struts  Validator
     9.4.2  对所有操作使用Struts  Validator
     9.4.3  验证每一个参数
     9.4.4  维护验证逻辑
   9.5  小结
第10章  XML与Web服务
   10.1  使用XML
     10.1.1  使用一个标准兼容的XML语法分析程序
     10.1.2  开启验证
     10.1.3  要小心外部引用
     10.1.4  保持对文档查询的控制
   10.2  使用Web服务
     10.2.1  输入验证
     10.2.2  WSDL苦恼
     10.2.3  过度暴露
     10.2.4  过去错误的新机会
     10.2.5  JavaScript劫持:一种新的边界
   10.3  小结
第11章  隐私与秘密
   11.1  隐私与规则
     11.1.1  识别私有信息
     11.1.2  处理私有信息
   11.2  外发密码
     11.2.1  源代码中不能有密码
     11.2.2  不存储明文密码
   11.3  随机数
     11.3.1  在Java中生成随机数
     11.3.2  在C和C++中生成随机数
   11.4  密码技术
     11.4.1  选择一个好的算法
     11.4.2  不要自以为是
   11.5  内存中的秘密
     11.5.1  使保持秘密的时间最短
     11.5.2  保守地共享秘密
     11.5.3  安全地删除秘密
     11.5.4  防止不必要地复制秘密
   11.6  小结
第12章  具有特权的程序
   12.1  特权的含义
     12.1.1  最小特权原理
     12.1.2  这次我是认真的:不相信每一件事
   12.2  管理特权
     12.2.1  在实践中应用最小特权
     12.2.2  限制文件系统上的特权
     12.2.3  谨防非期待的事件
   12.3  特权提升攻击
     12.3.1  文件访问竞态条件
     12.3.2  不安全的临时文件
     12.3.3  命令注入
     12.3.4  标准文件描述符
   12.4  小结
第四部分  静态分析实践
第13章  Java语言源代码分析练习
  练习13.0  安装
  练习13.1  留意结果,现在开始
  练习13.2  人工审计源代码
  练习13.3  运行Fortify  SCA
  练习13.4  理解原始的分析结果
  练习13.5  分析一个完整的应用程序
  练习13.6  使用Audit  Workbench调整结果
  练习13.7  审计一个问题
  练习13.8  执行一个完整的审计
  练习13.9  编写自定义规则
  练习13.2  中问题的答案
第14章  C语言源代码分析练习
  练习14.0  安装
  练习14.1  留意结果,现在开始
  练习14.2  人工审计源代码
  练习14.3  运行Fortify  SCA
  练习14.4  理解原始的分析结果
  练习14.5  分析一个完整的应用程序
  练习14.6  使用Audit  Workbench调整结果
  练习14.7  审计一个问题
  练习14.8  执行一个完整的审计
  练习14.9  编写自定义规则
  练习14.2中的问题答案
结束语
参考文献

本目录推荐