本分为为两部分。第一部分概括说明了保护系统安全的意义,以及设计安全系统的原则和所彩用的技术;第二部分概括介绍了几乎适用于任何应用程序的重要编码技术;第三部分重点介绍了网络应用程序和.Det代码安全;第四部分讨论的安全问题在一般图书中少有论及,如测试、进行安全代码审查、隐私策略以及安全的软件安装等问题;第五部分是附录,分别介绍危险的API以及分别适用于设计人员、开发人员和测试人员的安全措施核对清单。\r\n 本书第1版曾作为Windows开发组全体成员的必读教材,而第2版更是总结了在针对微软产品的多次安全活动中的许多新发现。本书曾被比尔·盖茨指定为微软员工必读书籍。是软件设计、开发、测试、系统管理等人员必读的优秀教材。\r\n \r\n \r\n
出版者的话\r\n专家指导委员会\r\n前言\r\n第一部分 现代安全 \r\n 第1章 对安全系统的需求\r\n 第2章 主动的安全开发过程\r\n 第3章 赖以生存的安全法则\r\n 第4章 威胁建模\r\n第二部分 安全的编码技术\r\n 第5章 头号公敌:缓冲区溢出\r\n 第6章 确定确当的访问控制\r\n 第7章 以最小特权运行\r\n 第8章 加密的特点\r\n 第9章 保护机密数据\r\n 第10章 一切输入都是有害的\r\n 第11章 规范表示的问题 \r\n 第12章 数据库输入问题\r\n 第13章 Wed特有的输入问题\r\n 第14章 国际化问题\r\n第三部分 更安全的编码技术\r\n 第15章 Socket安全 \r\n 第16章 RPC、ActiveX控件和DCOM安全\r\n 第17章 拒绝服务攻击的防范\r\n 第18章 编写安全的NET代码\r\n第四部分 特殊的安全问题\r\n 第19章 安全性测试\r\n 第20章 审查安全代码\r\n 第21章 在应有加入隐私策略\r\n 第22章 安全的软件安装\r\n 第23章 常用的好做法\r\n 第24章 编写安全文档和错误消息\r\n第五部分 附录\r\n参考文献\r\n\r\n\r\n
Michael Howard 《Designig secure Wed-Based for Microsift Windows 2000》的作者,致力于安全设计、安全编程和安全测试——这些都是Microsort windows开发小组中“安全Windows”倡导活动的一部分。他也是Microsoft 安全系列推广活动的架构师之一。
David LeBlanc Microsoft可信计算倡导活动的关键成员,致力于网络安全,编写网络审计工具,内部渗透测试的推广等。
在2002年2. 3月份, 人们都顾不上考虑Windows所有正常的安全特性了. 在此期间, 整个开发组的注意力都转向了如何提高此产品的下一版本--Windows Server2003--的安全上. 众所周知, "安全Windows倡议"的目的是使开发组成员了解最新的安全编码技术, 从而找出设计缺陷. 代码缺陷, 改进测试代码和文档. 在此期间, 本书的第1版是Windows开发组全体成员的必读教材, 而第2版收录了在这场活动中以及在针对微软其他产品的后续安全活动中的许多新发现, 这些产品包括SQLServer. Office. Exchange. Systems Management Server. Visual Studio. NET. .NET公共语言运行库, 等等.
Windows安全活动(以及许多其他的安全活动)的出发点, 源于比尔·盖茨2002年1月15日发表的"可信计算"备忘录, 其中概括说明了一种高级策略, 即如何向用户提交更安全. 更可靠的新型计算机系统. 自从有了那个备忘录, 我们已经与数千名开发人员交谈. 合作过, 而他们异口同声地说:"我们要做正确的事情……我们要开发安全的软件……但我们知道的还不够. "这种呼声是本书的直接催化剂:向他们传授学校里不教的技术--如伺设计. 生成. 测试和注释安全的软件. 所谓"安全的软件", 并不是指安全代码或实现安全特性的代码, 而是指为抵挡恶意攻击而设计的代码. 安全的代码也是健壮的代码.
本书的目标是绝对要保证切实可行, 书中可能使读者产生不安全感, 可能会感到自己的代码也许会受到攻击. 更确切地说, 如果你创建的应用程序要运行在一台或多台计算机上, 而这些计算机连到了网络上, 或最大的网络Internet上, 那么你的代码就可能会受到攻击.
系统安全受到威胁后会造成各种严重后果, 如生产力下降. 信誉受损以及财产损失, 如果攻击者能够破坏应用程序的安全(如, 使之无法使用), 你的客户就可能会转而使用竞争对手的产品. 在使用基于Internet的服务时, 大多数人都没有耐心, 如果你的服务不好用, 客户也会投奔你的竞争对手.
对于众多软件开发商来说, 真正的问题是, 安全所带来的效益不像开发过程那样是显而易见的. 因此, 管理层不愿意在培训开发人员以编写安全的代码方面多花钱, 在攻击得逞之前, 他们不想在安全技术上投资. 然而, 亡羊补牢, 则为时已晚. 事后的修补工作, 无论是在财力上还是在信誉上, 都要付出高昂的代价.
历史证明, 最好的方法是保护财产, 使之免遭盗窃和攻击. 我们的祖先早就制定了对盗窃. 损坏或侵占他人财物者的惩罚措施. 的确, 人们都明白, 私人财物应当受到保护. 这些道德准则也适用于数字世界, 因此, 作为开发人员, 我们的部分职责就是创建可保护数字资产的应用程序和解决方案.
本书包括一些基本概念, 这些内容在学校课程里介绍"设计和构建安全的系统"主题时应当讲过. 读者可能会认为, "设计"是设计人员或管理人员的事情, 但作为开发人员和测试人员, 同样也需要了解设计良好的系统结构以抵御攻击的有关过程.
众所周知, 无论花多少时间和精力来开发软件, 开发出的软件仍然会存在漏洞, 因为人们无法预测未来的安全问题. 对于Windows Server 2003来说, 同样也存在一些漏洞, 但按照本书中所建议的方法, 相信可以减少漏洞数, 使黑客更难于发现和利用代码中的漏洞.
本书于者对象
本书适用于设计应用程序或生成. 测试以及注释解决方案的人员. 如果编写基于Web或基于Win32的应用程序, 或者正在学习或开发基于Microsoft. NET框架的应用程序, 本书同样是很好的读物. 总之, 只要工作中涉及到应用程序开发, 都会在本书中找到许多值得学习的内容.
即使是正在编写不SMicrosoft平台上运行的代码, 书中的许多内容依然非常有用. 除了个别几章是完全针对Microsoft平台以外, 许多问题往往与平台无关. 即便有时某种东西似乎仅适用于Windows, 但其通常也有更加广泛的应用. 例如, Everyone用户的"安全控制"访问控制列表和UNIX系统上设置为"全部可写"的文件, 其实是同一问题, 而跨网站的脚本问题是普遍存在的.
本书组织结构
本书分为五个部分. 第一部分(第1-4章)概括说明了为什么要保护系统安全免遭攻击, 以及设计这种系统的原则和分析技术.
第二部分和第三部分是本书的重点. 第二部分(第5-14章)概括介绍了几乎适用于任何一种应用程序的重要的编码技术. 第三部分(第15~18章)重点介绍了网络应用程序和. NET代码.
第四部分(第19-24章)讲述了一般图书中很少讨论的一些主题, 如测试. 进行安全代码审查. 隐私策略以及安全的软件安装等问题. 第23章介绍了放在其他各章都不太合适的一些一般原则.
第五部分是"附录", 包括5个附录, 分别介绍危险的API, 我们常听到的一些不考虑安全问题的荒谬借口, 以及分别针对设计人员. 开发人员和测试人员的安全措施核对清单.
与其他作者不同, 我们不仅告诉你应用程序如何不安全, 而且告诉你为什么人们不愿意构建安全的系统. 本书绝对实用, 书中解释了系统怎样会受到攻击, 人们常犯的错误, 以及如何构建安全的系统--这才是最重要的.
安装和使用范例文件
通过连接到站点http://www.microsoft. com/mspress/books/5957. asp, 可以从Web上下载本书的范例文件(从Companion Content页下载). 要访问范例文件, 请单击该页右侧More Information框中的Companion Content链接, 打开Companion Content页, 此页中包括下载范例文件的链接:也可以连接到Microsoft Press Support站点. 下载链接可打开一个包含许可协议的可执行文件. 要想把范例文件复制到硬盘上, 请单击运行可执行文件的链接, 然后接受许可协议. 默认情况下, 范例文件将被复制到My Document\Microsoft Press\Secureco2文件夹下. 在安装过程中, 可以改变目标文件夹.
系统要求
尽管可以使用包括VisualC++6. 0在内的大多数编译器来编译本书中用C/C++编写的大多数范例, 但还是要求读者安装Microsoft Visual Studio. NET. 用Peri编写的范例已经使用Active StatePerl 5. 6或ActivateState VisualPerl 1. 0(可从http://www. activestate. com下载)测试过. VBScript和JScript代码已经用Windows Scripting Host测试过(Windows 2000及其以后的版本中包含WindowsScripting Host). 所有SQL范例都使用SQL Server2000测试过. 而Visual Basic. NET和Visual C#应用程序均是使用Visual Studio. NET编写和测试的.
本书中的所有应用程序(有两个例外), 均可以在符合建议的系统要求的. 运行Windows2000的计算机上运行. 第7章的Safer范例和第11章的UTF8 MultiByteToWideChar范例, 必须在WindowsXP或Windows Server 2003上才能正确运行. 编译代码时必须使用更加健壮的机器(即比编译器所要求的基本条件更优).