注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學(xué)技術(shù)計算機/網(wǎng)絡(luò)信息安全編寫安全的代碼

編寫安全的代碼

編寫安全的代碼

定 價:¥49.00

作 者: (美)Michael Howard,(美)David LeBlanc著;程永敬[等]譯;程永敬譯
出版社: 機械工業(yè)出版社
叢編項: 微軟公司核心技術(shù)書庫
標 簽: 綜合 安全與加密 計算機與互聯(lián)網(wǎng)

購買這本書可以去


ISBN: 9787111102854 出版時間: 2002-08-01 包裝: 平裝
開本: 24cm+光盤1片 頁數(shù): 345 字數(shù):  

內(nèi)容簡介

  對于“是否有這個必要”的疑問,在書中(第1章)作者是如此回答的:首先,時代在變,從“World Wide Web”(萬維網(wǎng))到“Wild Wild Web”(混亂無序的網(wǎng))絕非文字游戲。在如今這個充滿了敵意的網(wǎng)絡(luò)環(huán)境里面,編寫的代碼必須經(jīng)得起考驗,而再用舊的思維模式去思考新的問題是非常危險的。其次,安全的產(chǎn)品同時也是高質(zhì)量的產(chǎn)品,安全是高質(zhì)量產(chǎn)品的一個子集。再次,媒體和競爭對手都喜歡在安全問題上大做文章,這些都是能上頭條新聞的信息,屢屢成為犧牲品的公司不厭其煩,微軟即是一個典型的例子。最后一點就是,修補安全漏洞的代價是十分高昂的。除了直接的人力和誤工等損失之外,還包括改善公共關(guān)系和客戶信任度的降低的損失,我把它稱之為“商譽”上的損失。這四點從企業(yè)的角度對此做出了回答。對于個人而言,也有著種種的不解(附錄D):①沒有人會做那事!②我們從來沒有受到過攻擊。③我們使用了密碼、ACL和防火墻,所以安全。④檢查過代碼,沒有安全bug。對這些問題,作者顯然有著豐富的實踐經(jīng)驗:①當苦口婆心地告訴某個開發(fā)小組一定要做緩沖溢出測試時,大家顯然不相信。于是作者現(xiàn)場編寫了一個Perl的小腳本,它神奇地生成了一個偽造的包,發(fā)送給產(chǎn)品打開的Socket后,輕易地就擊潰了他們的服務(wù)器。②作者與一個產(chǎn)品開發(fā)組工作之時,對方信誓旦旦地說他們從來沒有受到過攻擊,沒有問題。然而就在他們被第一次攻擊之時,突然就涌現(xiàn)了另外的數(shù)個安全漏洞。黑客的嗜好就是發(fā)現(xiàn)漏洞,然后廣而告之,然后繼續(xù)探查你的其他漏洞,問題迅速擴大化。③作者告誡大家要避免以下錯誤:自創(chuàng)“加密”算法;不安全地存儲密碼;使用“任何人”的ACL。防火墻只是安全體系的一環(huán),并非全部。例如,很多攻擊都是通過HTTP,也就是一個通常開放的端口來進行的。④如果不知道安全bug是什么樣子,當然就沒有那個問題了。正如書中前言所提到的那樣,《編寫安全的代碼》一書“教你以安全的方式設(shè)計、編寫和測試應(yīng)用程序是本書惟一的目的”,始終圍繞著應(yīng)用程序安全的話題進行討論,從實踐的角度對代碼安全進行了全程的指導(dǎo)。同時,這也是“第一本指導(dǎo)程序員從內(nèi)部加強軟件安全的書籍”,是一本主要面向程序員,涉及各種攻擊漏洞的安全分析,并指導(dǎo)人們從開發(fā)階段即開始加強軟件安全的書。在此,我把它推薦給所有關(guān)心代碼安全的朋友們閱讀。

作者簡介

  Michael Howard:《Design Secure Web-Based Applications for Microsoft Windows 2000》一書的主要作者。從1992年就開始從事Windows NT安全方面的研究?,F(xiàn)在在微軟的Windows XP小組中負責安全方面的設(shè)計、編程和測試。他每年都要幫助全球上百家公司以保證他們的應(yīng)用的安全。David LeBlanc:微軟高信度計算安全性小組高級安全技術(shù)專家,安全技術(shù)方面的先鋒,他的職責是保衛(wèi)微軟網(wǎng)站免受黑客攻擊,一直從事安全領(lǐng)域方面的工作,曾因其在Internet安全系統(tǒng)方面的突出貢獻而獲得ISS安全產(chǎn)品獎。

圖書目錄

譯者序

前言
第一部分 現(xiàn)代安全
第1章 對安全系統(tǒng)的需求 
1.1 “Wild Wild Web”上的應(yīng)用程序 
1.2 讓每個人都參與進來 
1.2.1 利用機智使整個組織認識到安全的重要性 
1.2.2 使用搞破壞的方法 
1.3 用來灌輸安全文化的一些思想 
1.3.1 讓老板發(fā)一封電子郵件 
1.3.2 任命安全宣傳員 
第2章 設(shè)計安全的系統(tǒng) 
2.1 兩個常見的安全性錯誤 
2.2 賴以生存的安全策略 
2.2.1 建立一個安全步驟 
2.2.2 定義產(chǎn)品的安全目標 
2.2.3 將安全性看做是產(chǎn)品的一個功能 
2.2.4 從錯誤中吸取教訓(xùn) 
2.2.5 使用最小權(quán)限 
2.2.6 使用縱深防御 
2.2.7 假設(shè)外部系統(tǒng)是不安全的 
2.2.8 做好失效時的計劃 
2.2.9 失效時進入安全模式 
2.2.10 選擇安全的默認值
2.2.11 請記住安全性功能不等于安全的功能 
2.2.12 不要將安全建立在模糊信息上 
2.2.13 最后三個觀點 
2.3 用威脅模型做安全設(shè)計 
2.3.1 集體討論已經(jīng)知道的對系統(tǒng)的威脅 
2.3.2 以風險遞減的順序給威脅排序 
2.3.3 選擇對威脅做何種反應(yīng) 
2.3.4 選擇技術(shù)來緩解威脅 
2.4 安全方法 
2.4.1 認證 
2.4.2 授權(quán) 
2.4.3 抗篡改和加強保密的方法 
2.4.4 保護秘密,更好的辦法是不存儲秘密 
2.4.5 加密、散列、MAC和數(shù)字簽名 
2.4.6 審核 
2.4.7 過濾、扼殺和服務(wù)質(zhì)量 
2.4.8 最小權(quán)限 
2.5 回到工資應(yīng)用程序范例 
2.6 豐富的威脅和解決方案 
第二部分 安全的編碼技術(shù)
第3章 頭號公敵:緩沖區(qū)溢出 
3.1 靜態(tài)緩沖區(qū)溢出 
3.2 堆溢出 
3.3 數(shù)組索引錯誤 
3.4 格式化字符串bug 
3.5 Unicode和ANSI的緩沖區(qū)大小不匹配 
3.6 防止緩沖區(qū)溢出 
3.7 好消息 
第4章 確定有效的訪問控制 
4.1 ACL為什么如此重要 
4.2 ACL由哪些部分組成 
4.3 選擇一種有效的ACL方法 
4.4 創(chuàng)建ACL
4.4.1 在Windows NT 4中創(chuàng)建ACL
4.4.2 在Windows 2000中創(chuàng)建ACL 
4.4.3 使用活動模板庫創(chuàng)建ACL 
4.5 空的DACL以及其他危險的ACE類型 
4.5.1 空的DACL及審核
4.5.2 危險的ACE類型
4.5.3 如果不能改變空DACL的話應(yīng)該怎么辦
4.6 其他訪問控制機制
4.6.1 IP限制
4.6.2 COM+角色
4.6.3 SQL Server觸發(fā)器和權(quán)限
4.6.4 一個醫(yī)療上的實例
4.6.5 關(guān)于訪問控制機制的一點重要說明 
第5章 使用最低權(quán)限運行
5.1 在實際中的最低權(quán)限
5.1.1 病毒和木馬
5.1.2 破壞Web服務(wù)
5.2 訪問控制概述
5.3 權(quán)限概述
5.3.1 SeBackupPrivilege問題
5.3.2 SeDebugPrivilege問題
5.3.3 SeTcbPrivilege問題
5.3.4 SeAssignPrimaryTokenPrivilege和SeIncreaseQuotaPrivilege問題
5.4 對令牌的簡短回顧
5.5 令牌、權(quán)限、SID、ACL以及相關(guān)進程
5.6 確定使用恰當權(quán)限的過程 
5.6.1 步驟1:找出應(yīng)用程序所使用的資源 
5.6.2 步驟2:找出應(yīng)用程序所使用的有特權(quán)的API 
5.6.3 步驟3:需要哪個賬號
5.6.4 步驟4:獲取令牌的內(nèi)容
5.6.5 步驟5:是否所有的SID和權(quán)限都需要 
5.6.6 步驟6:調(diào)整令牌 
5.6.7 何時使用限定令牌 
5.7 Windows XP和Windows.NET Server中的低權(quán)限服務(wù)賬號 
5.8 調(diào)試的最低權(quán)限問題 
5.8.1 為什么以普通用戶運行的程序會失敗 
5.8.2 如何確定為什么程序會失敗 
第6章 密碼的缺陷 
6.1 使用拙劣的隨機數(shù) 
6.1.1 問題:rand函數(shù) 
6.1.2 一種補救方法:CryptGenRandom 
6.2 用口令衍生出加密密鑰 
6.3 糟糕的密鑰管理 
6.4 使用你自己的加密函數(shù) 
6.5 使用相同的流密碼對密鑰加密 
6.5.1 人們?yōu)槭裁匆昧髅艽a 
6.5.2 流密碼的缺陷 
6.5.3 你“非要”使用相同的密鑰會怎么樣 
6.6 對流密碼的位替換攻擊 
6.6.1 解決位替換攻擊問題 
6.6.2 什么時候使用散列、密鑰散列或數(shù)字簽名 
6.7 對明文和密文使用同一個緩沖區(qū) 
第7章 涉密信息的存儲 
7.1 攻擊方法 
7.2 有時你并不需要存儲秘密信息 
7.3 從用戶獲取秘密信息 
7.4 在Windows 2000和Windows XP中存儲秘密信息 
7.5 在Windows NT 4中存儲秘密信息 
7.6 在Windows 95、Windows 98、Windows Me和Windows CE中存儲秘密信息 
7.7 提高安全限制 
7.7.1 在FAT文件系統(tǒng)的文件中存儲數(shù)據(jù) 
7.7.2 利用一個嵌入密鑰和XOR來加數(shù)據(jù) 
7.7.3 利用嵌入密鑰和3DES加密數(shù)據(jù) 
7.7.4 利用3DES加密數(shù)據(jù)并在注冊表中存儲口令 
7.7.5 利用3DES加密數(shù)據(jù)并在注冊表中存儲一個強密鑰 
7.7.6 利用3DES加密數(shù)據(jù)、在注冊表中存儲一個強密鑰并對注冊表密鑰和文件進行ACL處理 
7.8 一個想法:用外部設(shè)備對秘密數(shù)據(jù)加密 
7.8.1 一個應(yīng)用PPCKey的例子 
7.8.2 PPCKey威脅方式 
第8章 規(guī)范的表示問題 
8.1 什么是規(guī)范?為什么它存在問題 
8.2 一點歷史 
8.2.1 繞過AOL的家長控制 
8.2.2 繞過Napster的名稱過濾 
8.2.3 繞過eEye的安全檢測 
8.2.4 蘋果機Mac OS X和Apache中的漏洞 
8.2.5 區(qū)域和IE4的“Dotless-IP Address”缺陷 
8.2.6 IIS4的::$DATA漏洞 
8.2.7 DOS驅(qū)動名漏洞 
8.2.8 Sun 公司StarOffice /tmp目錄符號連接漏洞 
8.3 一般的Windows規(guī)范化錯誤 
8.3.1 長文件名的8.3格式表示方式 
8.3.2 NTFS的另一種數(shù)據(jù)流 
8.3.3 后綴字符 
8.3.4 \\?\格式 
8.3.5 目錄遍歷和使用父路徑(..) 
8.3.6 絕對和相對文件名 
8.3.7 不區(qū)分大小寫的文件名 
8.3.8 設(shè)備名稱和保留名稱 
8.3.9 UNC共享 
8.4 防止規(guī)范化錯誤的出現(xiàn) 
8.4.1 不要根據(jù)名稱來做出判斷 
8.4.2 使用正則表達式來限制名稱的權(quán)限 
8.4.3 嘗試對名字進行規(guī)范化 
8.5 最后的思考:基于非文件的規(guī)范化問題 
8.5.1 服務(wù)器名 
8.5.2 用戶名 
第三部分 基于網(wǎng)絡(luò)的應(yīng)用程序
第9章 Socket安全 
9.1 避免服務(wù)器被截聽 
9.2 選擇服務(wù)器接口 
9.3 接受連接 
9.4 編寫防火墻友好的應(yīng)用程序 
9.4.1 用一個連接工作 
9.4.2 不要要求服務(wù)器連接回客戶端 
9.4.3 使用基于連接的協(xié)議 
9.4.4 不要通過另外一個協(xié)議使你的應(yīng)用程序進行多路復(fù)用 
9.4.5 不要在應(yīng)用層數(shù)據(jù)中嵌入主機IP地址 
9.4.6 讓你的應(yīng)用程序可配置 
9.5 欺騙、基于主機和基于端口的信任 
第10章 RPC、ActiveX控件和DCOM安全 
10.1 RPC入門 
10.1.1 什么是RPC 
10.1.2 創(chuàng)建RPC應(yīng)用程序 
10.1.3 RPC應(yīng)用程序的通信原理 
10.2 RPC安全最佳實踐 
10.2.1 使用/robust MIDL開關(guān)參數(shù) 
10.2.2 使用[range]表征項 
10.2.3 要求對連接進行驗證 
10.2.4 使用數(shù)據(jù)包的保密性和完整性 
10.2.5 使用嚴格的上下文句柄 
10.2.6 不要依靠上下文句柄來進行訪問檢查 
10.2.7 注意空的上下文句柄 
10.2.8 不要信任你的對端 
10.2.9 使用安全回調(diào) 
10.2.10 在單一進程中牽連多個RPC服務(wù)器 
10.2.11 考慮為你的終端添加一個注釋 
10.2.12 使用主流的協(xié)議 
10.3 DCOM安全最佳實踐 
10.3.1 DCOM基礎(chǔ) 
10.3.2 應(yīng)用層的安全 
10.3.3 DCOM用戶上下文環(huán)境 
10.3.4 可編程實現(xiàn)的安全性 
10.3.5 源端和接收端 
10.4 ActiveX入門 
10.5 ActiveX安全最佳實踐 
10.5.1 什么樣的ActiveX組件是可以安全用于初始化和腳本的 
10.5.2 可安全用于初始化和腳本的最佳實踐 
第11章 拒絕服務(wù)(DoS)攻擊的防范 
11.1 應(yīng)用程序失敗攻擊 
11.2 CPU資源不足攻擊 
11.3 內(nèi)存資源不足攻擊 
11.4 資源不足攻擊 
11.5 網(wǎng)絡(luò)帶寬攻擊 
第12章 基于Web服務(wù)的安全 
12.1 永遠不要相信用戶的輸入 
12.1.1 用戶輸入問題上的安全漏洞 
12.1.2 解決用戶輸入問題的方法 
12.2位Web特有的規(guī)范化問題 
12.2.1 7位和8位ASCII碼 
12.2.2 十六進制轉(zhuǎn)換碼 
12.2.3 UTF-8可變寬編碼 
12.2.4 UCS-2 Unicode編碼 
12.2.5 雙重編碼 
12.2.6 HTML轉(zhuǎn)換碼 
12.2.7 對基于Web的標準化問題的解決辦法 
12.3 其他基于Web的安全性主題 
12.3.1 HTTP信任問題 
12.3.2 ISAPI程序和過濾器 
12.3.3 不要在Web頁中存儲涉密數(shù)據(jù) 
12.3.4 真的需要使用sa嗎?可能不是 
第四部分 特殊話題
第13章 編寫安全的.NET代碼 
13.1 緩沖區(qū)溢出和CLR 
13.1.1 添加屬于你自己的安全性錯誤處理 
13.1.2 一個事實 
13.2 在.NET中保存涉密數(shù)據(jù) 
13.3 總是要求適當?shù)臋?quán)限 
13.4 過度使用Assert 
13.5 關(guān)于Demand和Assert的其他信息 
13.6 不要害怕拒絕權(quán)限 
13.7 對來自不可信任源的數(shù)據(jù)進行驗證 
13.8 ASP.NET中的線程支持問題 
13.9 在部署ASP.NET應(yīng)用程序之前要禁用跟蹤和調(diào)試 
13.10 使用.NET Framework產(chǎn)生良好的隨機數(shù) 
13.11 對來自不可信任源的數(shù)據(jù)進行反串行化 
13.12 在出現(xiàn)故障時,不要讓攻擊者獲知太多的信息 
13.13 權(quán)衡SAOP 
13.14 最后的一些想法 
第14章 測試應(yīng)用程序的安全性 
14.1 安全測試員的作用 
14.2 安全性測試與一般測試的區(qū)別 
14.3 進入正題 
14.4 建立安全性測試計劃 
14.4.1 分解應(yīng)用程序 
14.4.2 確定組件接口 
14.4.3 依照隱患的相對大小對接口進行排序 
14.4.4 確定每一個接口使用的數(shù)據(jù) 
14.4.5 通過注入錯誤的數(shù)據(jù)發(fā)現(xiàn)安全問題 
14.4.6 在測試之前 
14.4.7 制作用于發(fā)現(xiàn)缺陷的工具 
14.5 用欺詐性的服務(wù)程序測試客戶軟件 
14.6 用戶會看到或修改那些數(shù)據(jù)嗎 
14.7 用安全模板做測試 
14.8 測試代碼應(yīng)該有很高的質(zhì)量 
14.9 測試端到端的解決方案 
14.10 一些題外話:代碼評審 
第15章 安全的軟件安裝 
15.1 最低權(quán)限原則
15.2 使用安全配置編輯器 
15.3 低層的安全API 
第16章 常用的好經(jīng)驗 
16.1 保護客戶的隱私 
16.1.1 收集用戶數(shù)據(jù)的類型 
16.1.2 收集用戶數(shù)據(jù) 
16.2 不要告訴攻擊者任何東西 
16.3 雙重檢查你的錯誤路徑 
16.4 讓它保持關(guān)閉 
16.5 核心模式(Kernel-Mode)錯誤 
16.5.1 使用用戶模式(User-Mode)的內(nèi)存 
16.5.2 通過未受保護的IOCTL訪問有特權(quán)的接口 
16.6 考慮給代碼添加安全注釋 
16.7 借助于操作系統(tǒng)的功能 
16.8 不要依靠用戶來做出好的設(shè)計 
16.9 安全地調(diào)用CreateProcess 
16.9.1 不要將lpApplicationName設(shè)置為NULL 
16.9.2 在lpCommandLine參數(shù)中用引號包含執(zhí)行文件的路徑 
16.10 不要創(chuàng)建共享的/可寫的段(Segment) 
16.11 正確地使用假冒函數(shù) 
16.12 不要在\Program Files目錄中寫用戶文件 
16.13 不要在HKLM中寫用戶數(shù)據(jù) 
16.14 不要以完全控制或所有訪問的方式打開對象 
16.15 對象創(chuàng)建錯誤 
16.16 安全地創(chuàng)建臨時文件 
16.17 客戶端安全是一個矛盾 
16.18 例子是模板 
16.19 把你的應(yīng)用程序的使用者當成傻瓜 
16.20 如果…你將其歸功于你的用戶 
16.21 判斷基于管理員SID的訪問 
16.22 允許使用長的口令 
附 錄
附錄A 危險的API 
附錄B 十條安全法則 
附錄C 安全管理員的十條法則 
附錄D 安全的誤區(qū)

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號