图书介绍
编写安全的代码 第2版PDF|Epub|txt|kindle电子书版本网盘下载
![编写安全的代码 第2版](https://www.shukui.net/cover/42/30833803.jpg)
- (美)Michael Howard,(美)David LeBlanc著;程永敬等译 著
- 出版社: 北京:机械工业出版社
- ISBN:7111112105
- 出版时间:2005
- 标注页数:480页
- 文件大小:43MB
- 文件页数:498页
- 主题词:电子计算机-安全技术
PDF下载
下载说明
编写安全的代码 第2版PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第一部分 现代安全2
第1章 对安全系统的需求2
1.1“疯狂的Web网”上的应用程序3
1.2可信计算的需要4
1.3让每个人都参与进来5
1.3.1巧妙地向企业推销安全5
1.3.2使用搞破坏的方法7
1.4灌输安全意识的一些主意8
1.4.1让老板发一封电子邮件9
1.4.2任命安全宣传员9
1.5攻击者的优势和防御者的劣势12
1.5.1因素1:防御者必须对所有的环节都进行防御,而攻击者可以选择最薄弱的环节12
1.6本章小结13
1.5.4因素4:防御者的活动必须遵循相应的规则,而攻击者则可以采用一些卑鄙的手段13
1.5.3因素3:防御者必须永远保持警惕,而攻击者却可以随意“罢工”13
1.5.2因素2:防御者只能针对已知的攻击进行防御,而攻击者则可以探测未知的漏洞13
第2章 主动的安全开发过程14
2.1不断改进开发过程15
2.2安全教育的角色15
2.2.1强制培训的阻力17
2.2.2不断更新的培训18
2.2.3安全科学的进步18
2.2.4教育证明“更多的眼睛”不代表更安全18
2.2.5有力的证据!19
2.3设计阶段19
2.3.1面试期间的安全问题19
2.3.2定义产品的安全目标20
2.3.3安全是产品的一种特性22
2.3.7设置bug门槛24
2.3.6终结不安全的特性24
2.3.5安全的设计源于威胁建模24
2.3.4要有足够的时间考虑安全问题24
2.3.8安全小组审查25
2.4开发阶段25
2.4.1只有核心成员能够查看新代码(签字确认)25
2.4.2新代码的同级安全审查(签字确认)25
2.4.3定义安全的编码准则26
2.4.4审查旧的缺陷26
2.4.5外部安全审查26
2.4.6安全推动活动26
2.4.7留心自己的错误数量27
2.4.8记录错误27
2.4.9没有惊喜,也没有圣诞节彩蛋!27
2.6.2响应过程28
2.6.1如何知道已完成28
2.6发行和维护阶段28
2.5测试阶段28
2.6.3责任制29
2.7本章小结29
第3章 赖以生存的安全法则30
3.1设计安全、默认安全和部署安全30
3.1.1设计安全30
3.2安全法则31
3.1.3部署安全31
3.1.2默认安全31
3.2.1从错误中吸取教训32
3.2.2尽可能缩小攻击面33
3.2.3采用安全的默认设置34
3.2.4纵深防御35
3.2.5使用最小特权36
3.2.6向下兼容总是不安全的37
3.2.9失败时进入安全模式38
3.2.8失败时的应对计划38
3.2.7假设外部系统是不安全的38
3.2.10切记:安全特性不等于安全的特性40
3.2.11决不要将安全仅维系于隐匿40
3.2.12不要将代码与数据混在一起40
3.2.13正确地解决安全问题40
3.3本章小结41
第4章 威胁建模42
4.1通过威胁建模进行安全的设计42
4.1.1成立威胁建模小组43
4.1.2分解应用程序44
4.1.3确定系统所面临的威胁49
4.1.4以风险递减的顺序给威胁分级54
4.1.5选择应付威胁的方法63
4.2安全技术64
4.2.1身份认证64
4.1.6选择缓和威胁的方法64
4.2.2授权68
4.2.3防篡改和增强保密性的技术69
4.2.4保护秘密或最好不要保存秘密69
4.2.5加密、散列、MAC和数字签名69
4.2.6审核70
4.2.7过滤、节流和服务质量70
4.2.8最小特权70
4.3缓和工资表范例程序的威胁71
4.4各种威胁及解决方案71
4.5本章小结71
第二部分 安全的编码技术76
第5章 头号公敌:缓冲区溢出76
5.1堆栈溢出77
5.2堆溢出83
5.3数组下标错误87
5.4格式字符串错误89
5.5Unicode和ANSI缓冲区大小不匹配93
5.6预防缓冲区溢出95
5.6.1字符串处理方面的安全问题96
5.6.2关于字符串处理函数的警告103
5.7VisualC++.NET的/GS选项104
5.8本章小结106
第6章 确定适当的访问控制107
6.1ACL何以如此重要107
6.2ACL的组成109
6.3选择好的ACL的方法111
6.4创建ACL113
6.4.1在WindowsNT4中创建ACL113
6.4.2在Windows2000中创建ACL116
6.4.3用活动模板库创建ACL119
6.5对ACE进行正确的排序120
6.6留意终端服务器和远程桌面的SID122
6.7NULLDACL和其他的危险ACE类型123
6.7.1NULLDACL和审核124
6.7.2危险的ACE类型124
6.7.3如果无法改变NULLDACL该怎么办125
6.8其他的访问控制机制125
6.8.1.NET框架角色126
6.8.2COM+角色127
6.8.3IP限制127
6.8.4SQLServer触发器和权限128
6.8.5一个医学方面的示例128
6.8.6关于访问控制机制的重要说明129
6.9本章小结130
第7章 以最小特权运行131
7.1现实中的最小特权131
7.1.2破坏Web服务器132
7.1.1病毒和特洛伊木马132
7.3特权简介133
7.2访问控制简介133
7.3.1SeBackupPrivilege问题134
7.3.2SeRestorePrivilege问题136
7.3.3SeDebugPrivilege问题136
7.3.4SeTcbPrivilege问题136
7.3.5SeAssignPrimaryTokenPrivilege和SelncreaseQuotaPrivilege问题137
7.3.6SeLoadDriverPrivilege问题137
7.3.7SeRemoteShutdownPrivilege问题137
7.3.8SeTakeOwnershipPrivilege问题137
7.4令牌简介137
7.5令牌、特权、SID、ACL和进程之间的关系138
7.6应用程序要求提高特权的三个理由139
7.6.1ACL问题139
7.7解决提高特权的问题140
7.7.1解决ACL问题140
7.6.2特权问题140
7.6.3使用LSA秘密140
7.7.2解决特权问题141
7.7.3解决LSA问题141
7.8确定适当特权的过程141
7.8.1步骤1:找到应用程序使用的资源141
7.8.2步骤2:找到应用程序使用的特权API142
7.8.3步骤3:哪一个帐户是必需的142
7.8.4步骤4:获取令牌的内容143
7.8.5步骤5:所有SID和特权是否都是必需的147
7.8.6步骤6:调整令牌148
7.9WindowsXP和WindowsServer2003中的低特权级服务帐户158
7.10模拟特权和WindowsServer2003159
7.11.2如何判断应用程序失败的原因160
7.11.1为什么以普通用户运行时应用程序失败160
7.11调试最小特权问题160
7.12本章小结165
第8章 加密的弱点166
8.1使用不良的随机数166
8.1.1问题:rand函数166
8.1.2Win32中的加密随机数168
8.1.3托管代码中的加密随机数172
8.1.4Web页中的加密随机数172
8.2使用口令生成加密密钥173
8.3密钥管理问题174
8.3.1长期密钥和短期密钥175
8.3.2使用合适的密钥长度保护数据176
8.3.3将密钥保存在靠近数据源的地方176
8.3.4密钥交换问题179
8.4创建自己的加密函数180
8.5使用相同的流密码加密密钥181
8.5.1人们为什么使用流密码182
8.5.2流密码的缺陷182
8.5.3如果必须使用相同的密钥怎么办184
8.6针对流密码的位替换攻击185
8.6.1解决位替换攻击185
8.6.2何时使用散列、密钥散列或数字签名186
8.7重用明文和密文的缓冲区190
8.8使用加密技术缓和威胁191
8.9在文档中说明你使用的加密算法191
8.10本章小结191
第9章 保护机密数据192
9.1攻击机密数据192
9.2有时并不需要保存秘密193
9.2.1创建干扰散列193
9.2.2使用PKCS#5增加攻击的难度194
9.3获取用户的秘密信息195
9.4保护Windows2000及其以后版本中的秘密信息196
9.5保护WindowsNT4中的秘密信息199
9.6保护Windows95/98/ME/CE中的秘密202
9.7不要选择最低共同点解决方案205
9.8管理内存中的秘密206
9.8.1编译器优化警告207
9.8.2对内存中的机密数据进行加密210
9.9锁定内存以防敏感数据被分页211
9.10保护托管代码中的机密数据211
9.11提高安全门槛217
9.11.1把数据存储在FAT系统的文件中217
9.11.2使用嵌入密钥和XOR对数据进行编码217
9.11.6使用3DES加密数据,把强密钥存储在注册表中,并使用ACL控制文件和注册表项218
9.12保护机密数据时的折衷方案218
9.11.7使用3DES加密数据,把强密钥存储在注册表中,要求用户输入密码,并使用ACL控制文件和注册表项218
9.11.4使用3DES加密数据并把密码存放在注册表中218
9.11.5使用3DES加密数据并把强密钥存储在注册表中218
9.11.3使用嵌入密钥和3DES加密数据218
9.13本章小结219
第10章 一切输入都是有害的220
10.1问题220
10.2误信他人221
10.3防御输入攻击的策略222
10.4如何检查合法性223
10.5Perl中被污染的变量225
10.6使用正则表达式检查输入225
10.7正则表达式和Unicode228
10.8.1Perl中的正则表达式231
10.8.2托管代码中的正则表达式231
10.8正则表达式的“罗塞塔石碑”231
10.8.3脚本中的正则表达式232
10.8.4C++中的正则表达式232
10.9不使用正则表达式的最佳做法233
10.10本章小结234
第11章 规范表示的问题235
11.1规范的含义及其存在的问题235
11.2规范文件名的问题235
11.2.1绕过Napster名称过滤235
11.2.2AppleMacOSX和Apache的漏洞236
11.2.3DOS设备名漏洞236
11.2.4Sun公司的StarOffice/tmp目录的符号链接漏洞236
11.2.5常见的Windows规范文件名错误237
11.3.1绕过AOL的父母控制241
11.3.2绕过eEye的安全检查241
11.3基于Web的规范问题241
11.3.3安全区域和IE4的“无点IP地址”错误242
11.3.4IIS4.0的∷$DATA漏洞242
11.3.5何时一行变成了两行244
11.3.6另一个Web问题——转义244
11.4视觉等效攻击和同形异义词攻击247
11.5预防规范化错误247
11.5.1不要根据文件名进行决策247
11.5.2使用正则表达式限制文件名的格式248
11.5.3停止生成8.3格式的文件名249
11.5.4不要相信PATH环境变量,要使用完整的路径名249
11.5.5尝试规范化文件名249
11.5.6安全地调用CreateFile252
11.6基于Web的规范化问题的补救措施253
11.6.1限制合法输入253
11.6.2处理UTF-8字符时要谨慎253
11.7最后的考虑:非基于文件的规范化问题254
11.7.1服务器名254
11.6.3ISAPI—岩石和硬地之间254
11.7.2用户名255
11.8本章小结257
第12章 数据库输入问题258
12.1问题258
12.2伪补救措施1:用引号将输入括起来260
12.3伪补救措施2:使用存储过程260
12.4补救措施1:永不以sysadmin身份连接261
12.5补救措施2:以安全的方式创建SQL语句262
12.6纵深防御示例263
12.7本章小结266
第13章 Web特有的输入问题267
13.1跨网站脚本:输出何时变坏了267
13.2与XSS有关的其他攻击270
13.2.1针对本地文件的XSS攻击270
13.1.2攻击者不需要用户点击链接!270
13.1.1有时攻击者不需要〈SCRIPT〉块270
13.2.2针对HTML资源的XSS攻击272
13.3XSS的补救措施272
13.3.1将输出编码272
13.3.2为所有的标签属性加上双引号272
13.3.3将数据插入innerText属性273
13.3.4强制使用代码页273
13.3.5IE6.0SPI的cookie选项HttpOnly274
13.3.6IE的“Web标记”275
13.3.7IE的〈FRAMESECURITY〉属性276
13.3.8ASP.NET1.1的ValidateRequest配置选项276
13.4不要只是寻找不安全的结构277
13.5我只是想让用户向我的Web站点发送HTML278
13.7.2HTTP信任问题279
13.7.1eval()可能是坏的279
13.6如何审查代码中的XSS错误279
13.7基于Web的其他安全主题279
13.7.3ISAPI应用程序和过滤器280
13.7.4警惕“可预知的Cookie”282
13.7.5SSL/TLS客户端的问题283
13.8本章小结283
第14章 国际化问题284
14.1I18N安全的黄金准则284
14.2在应用程序中使用Unicode284
14.3预防I18N缓冲区溢出285
14.4验证I18N286
14.4.1视觉验证286
14.4.2不要使用LCMapString验证字符串286
14.4.3使用CreateFile验证文件名286
14.6调用MultiByteToWideChar时使用MB_PRECOMPOSED和MB_ERR_INVALID_CHARS287
14.7调用WideCharToMultiByte时使用WC_NO_BEST_FIT_CHARS445287
14.5字符集转换问题287
14.8比较和排序289
14.9Unicode字符属性290
14.10规范化291
14.11本章小结291
第三部分 更安全的编码技术294
第15章 Socket安全294
15.1避免服务器被劫持294
15.4接受连接300
15.2TCP窗口攻击300
15.3选择服务器接口300
15.5编写防火墙友好的应用程序304
15.5.1只用一个连接工作305
15.5.2不要要求服务器连接回客户端305
15.5.3使用基于连接的协议305
15.6欺骗、基于主机和基于端口的信任306
15.5.6让你的应用程序可配置306
15.5.5不要在应用层数据中嵌入主机IP地址306
15.5.4不要通过另外一个协议使你的应用程序进行多路复用306
15.7IPv6即将到来307
15.8本章小结308
第16章 RPC、ActiveX控件和DCOM安全309
16.1RPC入门309
16.1.1什么是RPC310
16.1.2创建RPC应用程序310
16.1.3RPC应用程序的通信原理311
16.2RPC安全最佳实践312
16.2.1使用/robustMIDL开关参数312
16.2.2使用[range]属性313
16.2.3要求对连接进行验证313
16.2.4使用数据包的保密性和完整性317
16.2.5使用严格的上下文句柄318
16.2.6不要依靠上下文句柄来进行访问检查319
16.2.7注意空的上下文句柄320
16.2.8不要信任你的对等端321
16.2.9使用安全回调321
16.2.10在单一进程中驻留多个RPC服务器323
16.2.11使用主流的协议324
16.3DCOM安全最佳实践325
16.3.1DCOM基础325
16.3.2应用层的安全326
16.3.3DCOM用户上下文环境326
16.3.4可编程实现的安全性328
16.3.5源端和接收端331
16.4ActiveX入门331
16.5ActiveX安全最佳实践331
16.5.1什么样的ActiveX组件是初始化安全和脚本安全的332
16.5.2初始化安全和脚本安全的最佳实践333
16.6本章小结335
第17章 拒绝服务攻击的防范336
17.1应用程序失败攻击336
17.2CPU不足攻击339
17.3内存不足攻击344
17.4资源不足攻击345
17.5网络带宽攻击346
17.6本章小结346
第18章 编写安全的.NET代码348
18.1代码访问安全概述349
18.2FxCop:“必备的”工具350
18.3程序集是强命名的351
18.4指定程序集权限需求352
18.4.1请求最小的权限集353
18.4.2拒绝不必要的权限353
18.4.3请求可选的权限353
18.5过分热衷于使用Assert方法354
18.6关于Demand和Assert方法的进一步信息355
18.7及时禁用断言356
18.8请求和链接请求357
18.9慎用SuppressUnmanagedCodeSecurityAttribute属性358
18.10远程请求359
18.11限制代码的使用范围359
18.12不要在XML或配置文件中存储敏感数据360
18.13审查允许部分信任的程序集361
18.14检查非托管代码的托管包装的正确性362
18.15委托的问题362
18.16序列化的问题362
18.17隔离存储的作用363
18.18在部署ASP.NET应用程序之前禁用跟踪和调试364
18.19不要远程发布冗长的错误信息364
18.21失败时不要让攻击者知道太多365
18.20对来源不可信的数据进行反序列化365
18.22本章小结366
第四部分 特殊的安全问题368
第19章 安全性测试368
19.1安全性测试人员的角色368
19.2安全性测试与一般测试的区别368
19.3根据威胁模型制定安全性测试计划369
19.3.1分解应用程序369
19.3.2确定组件接口370
19.3.3按照潜在的漏洞对接口进行分级371
19.3.4确定每一个接口使用的数据结构371
19.3.5STRIDE类型的攻击程序372
19.3.6用数据变种攻击应用程序373
19.3.7测试之前381
19.3.8开发查找缺陷的工具381
19.4用欺诈性的服务程序测试客户软件394
19.5用户是否应看到或修改数据395
19.6用安全模板进行测试395
19.7发现一个错误时测试并未结束396
19.8测试码应有很高的质量397
19.9测试端到端解决方案397
19.10确定攻击面397
19.10.1确定根攻击向量398
19.10.2确定攻击向量的偏差398
19.10.3统计产品中有偏差的攻击向量398
19.11本章小结399
第20章 审查安全代码400
20.1处理大型应用程序401
20.2多遍审查方法401
20.3从易处着手402
20.4整数溢出403
20.5检查返回结果405
20.7绝不要相信网络上的数据406
20.6对指针代码进行额外的审查406
20.8本章小结407
第21章 安全的软件安装408
21.1最小特权原则408
21.2安装后立即清除密码410
21.3使用安全配置编辑器410
21.4低层的安全API415
21.5使用WindowsInstaller416
21.6本章小结416
第22章 在应用程序中加入隐私策略417
22.1对隐私的恶意侵犯和令人讨厌的侵犯417
22.2主要的隐私立法417
22.2.2关于数据保护的欧盟法令418
22.2.3安全海港原则418
22.2.1个人身份信息418
22.2.4其他隐私立法419
22.3隐私与安全419
22.4建立隐私基础设施420
22.4.1首席隐私官的作用420
22.4.2隐私倡导者的作用421
22.5设计尊重隐私的应用程序421
22.5.1在开发过程中加入隐私策略421
22.5.2了解隐私的特点423
22.6本章小结429
第23章 常用的好做法430
23.1不要向攻击者透露任何信息430
23.2关于服务的最佳做法430
23.2.1安全、服务和交互式桌面430
23.2.2服务帐户准则431
23.7核心态错误433
23.6让它保持关闭433
23.7.1高级安全问题433
23.4在补丁中改变错误信息时要谨慎433
23.3不要以标志字符串的形式泄漏信息433
23.5复查错误路径433
23.7.2句柄434
23.7.3符号链接434
23.7.4配额435
23.7.5序列化原语435
23.7.6缓冲区处理问题435
23.7.7IRP取消436
23.8在代码中添加关于安全的注释437
23.9借助于操作系统的功能437
23.10不要依赖用户去做正确的选择437
23.11安全地调用CreateProcess函数438
23.11.2用引号把IpCommandLine中可执行文件的路径括起来439
23.12不要创建共享的/可写的代码段439
23.11.1不要将IpApplicationName设置为NULL439
23.13正确使用模拟函数440
23.14不要将用户文件写入\ProgramFiles目录440
23.15不要把用户数据写入HKLM440
23.16不要以“完全控制”权限打开对象441
23.17对象创建错误441
23.18慎用CreateFile442
23.19安全地创建临时文件443
23.20Setup程序和EFS文件系统的问题445
23.21文件系统重解析点问题445
23.22客户端安全是自相矛盾的说法446
23.23范例就是模板446
23.24以身作则,亲身体验447
23.25你得向用户负责447
23.26基于管理员SID确定访问权限447
23.28慎用_alloca448
23.27允许使用长口令448
23.30不要嵌入公司的名称449
23.29ATL转换宏449
23.31将字符串移至资源DLL中450
23.32应用程序日志450
23.33从危险的C/C++迁移到托管代码450
第24章 编写安全文档和错误消息451
24.1文档中的安全问题451
24.1.1关于文档的基础知识451
24.1.2通过文档缓和威胁452
24.1.3编写安全性文档的最佳做法452
24.2错误消息中的安全问题453
24.3典型的安全消息454
24.4信息泄漏问题454
24.4.1知情同意455
24.4.3消息要具体456
24.4.2累进泄漏456
24.4.4最好不要提问457
24.5对安全消息进行可用性测试458
24.6审阅产品说明书时的注意事项458
24.7安全设置的可用性458
24.8本章小结459
第五部分 附录462
附录A 危险的API462
附录B 安全误区469
附录C 设计人员的安全措施核对清单473
附录D 开发人员的安全措施核对清单474
附录E 测试人员的安全措施核对清单477
最后的一点思考478
参考文献479