图书介绍

编写安全的代码 第2版PDF|Epub|txt|kindle电子书版本网盘下载

编写安全的代码 第2版
  • (美)Michael Howard,(美)David LeBlanc著;程永敬等译 著
  • 出版社: 北京:机械工业出版社
  • ISBN:7111112105
  • 出版时间:2005
  • 标注页数:480页
  • 文件大小:43MB
  • 文件页数:498页
  • 主题词:电子计算机-安全技术

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

编写安全的代码 第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

热门推荐