注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計算機/網(wǎng)絡(luò)軟件與程序設(shè)計C/C++及其相關(guān)C安全編碼標(biāo)準(zhǔn)

C安全編碼標(biāo)準(zhǔn)

C安全編碼標(biāo)準(zhǔn)

定 價:¥69.00

作 者: (美)塞克德 著,徐波 等譯
出版社: 機械工業(yè)出版社
叢編項: 開發(fā)人員專業(yè)技術(shù)叢書
標(biāo) 簽: VC++

ISBN: 9787111284420 出版時間: 2010-01-01 包裝: 平裝
開本: 16開 頁數(shù): 496 字?jǐn)?shù):  

內(nèi)容簡介

  《C安全編碼標(biāo)準(zhǔn)》提供了在C編程語言中進行安全編碼的指導(dǎo)方針,描述了C語言程序中導(dǎo)致軟件潛在風(fēng)險根源的編碼錯誤,并根據(jù)嚴(yán)重性、被利用的可能性以及修補成本設(shè)置了優(yōu)先級。每個指導(dǎo)方針提供了不安全代碼的例子以及安全的替代方案。如果統(tǒng)一應(yīng)用這些指導(dǎo)方針,可幫助消除導(dǎo)致緩沖區(qū)溢出、格式字符串潛在風(fēng)險、整數(shù)溢出和常見的軟件潛在風(fēng)險的關(guān)鍵編碼錯誤,從而創(chuàng)建更健壯的高質(zhì)量軟件系統(tǒng)?!禖安全編碼標(biāo)準(zhǔn)》內(nèi)容新穎,講解詳盡,可作為軟件開發(fā)技術(shù)人員的參考用書。軟件安全性對于公司的運作和財富具有很大的影響,與個人的生活也息息相關(guān)。為了創(chuàng)建安全的軟件,開發(fā)人員必須知道什么地方存在危險。C的安全編碼要比許多經(jīng)驗豐富的程序員所想像的更為困難。《C安全編碼標(biāo)準(zhǔn)》是一本重要的桌面參考手冊,記錄了《CERTC安全編碼標(biāo)準(zhǔn)》的第一次官方發(fā)布。這個標(biāo)準(zhǔn)逐項描述了C語言程序中導(dǎo)致軟件潛在風(fēng)險根源的編碼錯誤,并根據(jù)嚴(yán)重性、被利用的可能性以及修補成本設(shè)置了優(yōu)先級。每個指導(dǎo)方針提供了不安全代碼的例子以及安全的替代方案。如果統(tǒng)一應(yīng)用這些指導(dǎo)方針,可以消除可能導(dǎo)致緩沖區(qū)溢出、格式字符串潛在風(fēng)險、整數(shù)溢出和常見的軟件潛在風(fēng)險的關(guān)鍵編碼錯誤。

作者簡介

  RobertC.Seacord,在位于賓夕法尼亞州匹茲堡市的軟件工程協(xié)會(SEI)的CERT小組倡導(dǎo)了安全編碼活動。除了其他與安全相關(guān)的活動,CERT還定期分析軟件潛在風(fēng)險報告,并評估它們對Intemet和其他關(guān)鍵的基礎(chǔ)結(jié)構(gòu)的風(fēng)險。Robea是CarnegieMellon大學(xué)計算機科學(xué)系和信息網(wǎng)絡(luò)協(xié)會的助理教授,并在Pittsburgh大學(xué)兼職。作為一名電子技術(shù)專家,Rob.err已經(jīng)出版了SecureCodeinginCandC++》(Addison.Wesley,2005)、(BuildingSystemfromCommercialcomponents}(Addison-Wesley,2002)和《ModernizingLegacysystems))(Addison-Wesley,2003)3本書,并發(fā)表了40余篇有關(guān)軟件安全、基于組件的軟件工程、基于Web的系統(tǒng)設(shè)計、遺留系統(tǒng)的現(xiàn)代化、組件倉庫、搜索引擎以及用戶界面設(shè)計和開發(fā)的論文。Rob.ert于1982年開始在IBM做一名專業(yè)的程序員,致力于通信和操作系統(tǒng)軟件開發(fā)、處理器開發(fā)和軟件工程。Robea還在XConsortium工作過,為通用桌面環(huán)境和XWindow系統(tǒng)開發(fā)和維護代碼。他是CarnegieMellon大學(xué)在PL22.11(ANSI“C”)的代表,并且是c編程語言的JTCl/SC22/WGl4國際標(biāo)準(zhǔn)化工作組的一位技術(shù)專家。

圖書目錄

關(guān)于作者
前言
第1章 本標(biāo)準(zhǔn)使用說明
系統(tǒng)質(zhì)量一
自動生成的代碼
順應(yīng)性
第2章 預(yù)處理器(PRE)
建議和規(guī)則
風(fēng)險評估匯總
相關(guān)規(guī)則和建議
PRE00-C.用內(nèi)聯(lián)函數(shù)或靜態(tài)函數(shù)代替與函數(shù)相似的宏
PRE01-C.在宏參數(shù)名兩邊加上括號
PRE02-C.宏替換列表應(yīng)該加上括號
PRE03-C.應(yīng)該使用typedef定義編碼類型
PRE04-C.不要復(fù)用標(biāo)準(zhǔn)頭文件名
PRE05-C.理解連接標(biāo)記或執(zhí)行字符串化時的宏替換
PRE06-C.把頭文件放在包含防護條件中
PRE07-C.避免使用連續(xù)的問號
PRE08-C.保證頭文件名惟
PRE09-C.不要用不安全的函數(shù)替換安全函數(shù)
PRE10-C.在一個do-while循環(huán)中包裝多條語句的宏
PRE30-C.不要通過連接創(chuàng)建統(tǒng)一字符名稱一
PRE31-C.不要在不安全宏的參數(shù)中包含賦值、增值、減值、volatile訪問或函數(shù)調(diào)用
第3章 聲明和初始化(DCL)
建議和規(guī)則
風(fēng)險評估匯總
DcL00-C.用const限定不可修改的對象
DcL01-C.不要在子作用域中復(fù)用變量名
DcL02-C.使用視覺區(qū)別明顯的標(biāo)識符
DcL03-C.使用靜態(tài)斷言測試常量表達式的值
DcL04-C.不要在一個聲明中聲明超過1個的變量
DCID5-C.使用typedef。聲明提高代碼的可讀性
DCI06-C.使用有意義的符號常量表示程序邏輯中的字面值
DCI07-C.在函數(shù)聲明器中包含適當(dāng)?shù)念愋托畔?br />DCID8-C.在常量定義中對關(guān)系進行正確的編碼
DCI09-C.把返回errno錯誤代碼的函數(shù)的返回類型聲明為errmo-t
DCL10-C.維護變參函數(shù)的編寫者和調(diào)用者之間的契約
DCL11-C.理解與變參函數(shù)相關(guān)聯(lián)的類型問題
DCL12-C.使用不透明類型實現(xiàn)抽象數(shù)據(jù)類型
DCL13-C.把不會被函數(shù)修改的值指針參數(shù)聲明為const
DCL-14.不要對跨翻譯單元的全局變量的初始化順序作出假設(shè)
DCL15-C.把不需要外部鏈接的對象聲明為static
DCL30-C.聲明具有正確存儲持久期的對象
DCL31-C.在使用標(biāo)識符之前聲明它們
DCL32-C.保證相互可見的標(biāo)識符是惟一的
DCL33-C.保證函數(shù)實參中具有限制性限定的源指針和目標(biāo)指針不引用重疊的對象
DCL34-C.對無法緩存的數(shù)據(jù)使用volatile
DCL35-C.不要使用與函數(shù)定義不匹配的類型轉(zhuǎn)換函數(shù)DC136-C.不要聲明具有沖突鏈接屬性的標(biāo)識符
第4章 表達式(EXP)
建議和規(guī)則
風(fēng)險評估匯總
相關(guān)的規(guī)則和建議
EXP00-C.使用括號保證操作的優(yōu)先級
EXP01-C.不要用指針的長度確定它所指向類型的長度
EXP02-C.注意邏輯AND和OR操作符的短路行為
EXP03-C.不要認(rèn)為結(jié)構(gòu)的長度等于它的各個成員的長度之和·
EXP04-C.不要在結(jié)構(gòu)之間執(zhí)行逐字節(jié)的比較
EXP05-C.不要轉(zhuǎn)換掉eonst限定
EXP06-C.sizeof操作符的操作數(shù)不應(yīng)該包含副作用
EXP07-C.不要在表達式中對常量的值作出假設(shè)而削弱常量的優(yōu)點
EXP08-C.確保正確地使用指針運算
EXP09-C.使用sizeof確定類型或變量的長度
EXP10-C.不要依賴子表達式的求值順序或副作用的發(fā)生順序
EXP11-C.不要把期待一種類型的操作符應(yīng)用于一種不兼容的類型
EXP12-C.不要忽略函數(shù)的返回值
EXP30-C.不要依賴序列點之間的求值順序
EXP31-C.避免斷言的副作用
EXP32-C.不要轉(zhuǎn)換掉volatile限定
EXP33-C.不要引用未初始化的內(nèi)存
EXP34-C.保證不對null指針進行解引用
EXP35-C.不要在后續(xù)的序列點之后訪問或
修改一個函數(shù)的調(diào)用結(jié)果中的數(shù)組
EXP36-C.不要把指針轉(zhuǎn)換為對齊要求更嚴(yán)格的指針類型
EXP37-C.調(diào)用函數(shù)時使用API所指定的參數(shù)
EXP38-C.不要在位段成員或非法類型上調(diào)用offsetof()
第5章 整數(shù)(INT)
建議和規(guī)則
風(fēng)險評估匯總
相關(guān)的規(guī)則和建議
INT00-C.理解編譯器所使用的數(shù)據(jù)模型
INT01-C.使用rsize-t或size-t類型表示所有表示對象長度的整數(shù)值
INT02-C.理解整數(shù)轉(zhuǎn)換規(guī)則
INT03-C.使用安全的整數(shù)庫
INT04-C.對來自不信任來源的整數(shù)值實行限制
INT05-C.如果輸入函數(shù)無法處理所有可能出現(xiàn)的錯誤就不要用它們轉(zhuǎn)換字符數(shù)據(jù)
INT06-C.使用strtol()或相關(guān)函數(shù)把字符串標(biāo)記轉(zhuǎn)換為整數(shù)
INT07-C.只使用顯式的有符號或無符號char類型表示數(shù)值
INT08-C.驗證所有的整數(shù)值位于范圍內(nèi)
INT09-C.保證枚舉常量映射到惟的值
INT10-C.使用%操作符時不要假設(shè)余數(shù)總是正的
INT11-C.把指針轉(zhuǎn)換為整數(shù)或者把整數(shù)轉(zhuǎn)換為指針時需要小心
INT12-C.當(dāng)普通的整數(shù)位段用于表達式不要對它的類型作出假設(shè)
INT13-C.只對無符號操作數(shù)使用位操作符
INT14-C.避免在同一個數(shù)據(jù)上執(zhí)行位操作和算術(shù)運算
INT15-C.在程序員定義的整數(shù)類型的格式化L/O中使用intmax-t或uintmax-t
INT30-C.保證無符號整數(shù)運算不產(chǎn)生回繞
INT31-C.保證整型轉(zhuǎn)換不會丟失或錯誤解第數(shù)據(jù)
INT32-C.保證有符號整數(shù)運算不會產(chǎn)生溢出
INT33-C.保證除法和求模運算不會導(dǎo)致除零錯誤
INT34-C.移位的數(shù)量不能是負(fù)數(shù)或大于操作數(shù)的位數(shù)
INT35-C.把整型表達式比較或賦值為一種較大類型之前用這種較大類型對它進行求值
第6章 浮點數(shù)(FCP)
建議和規(guī)則
風(fēng)險評估匯總
相關(guān)規(guī)則和建議
FLP00-C.理解浮點數(shù)的限制
FLP01-C.在重新排列浮點表達式時需要注意
FLP02-C.需要精確計算時避免使用浮點數(shù)
FLP03-C.檢測和處理浮點錯誤
FLP30-C.不要使用浮點數(shù)作為循環(huán)計數(shù)器
FLP31-C.不要用復(fù)數(shù)調(diào)用期望接受實數(shù)的函數(shù)
FLP32-C.防止或檢測數(shù)學(xué)函數(shù)中的定義域錯誤和值域錯誤
FLP33-C.執(zhí)行浮點運算時把整數(shù)轉(zhuǎn)換為浮點數(shù)
FLP34-C.保證浮點轉(zhuǎn)換位于新類型的范圍之內(nèi)
第7章 數(shù)組(ARR)
建議和規(guī)則
風(fēng)險評估匯總
相關(guān)規(guī)則和建議
ARR00-C.理解數(shù)組的工作方式
ARR01-C.獲取數(shù)組的長度時不要對指針應(yīng)用sizeof操作符
ARR02-C.顯式地指定數(shù)組的邊界,即使它已經(jīng)由初始化佰列表隱式地指定
ARR30-C.保證數(shù)組索引位于合法的范圍之內(nèi)
ARR31-C.在所有源文件中使用一致的數(shù)組記法
ARR32-C.保證變長數(shù)組的長度參數(shù)位于合法范圍之內(nèi)
ARR33-C.保證復(fù)制的目標(biāo)具有足夠的存儲空間
ARR34-C.保證表達式中的數(shù)組類型是兼容的
ARR35-C.不允許循環(huán)迭代到數(shù)組尾部之后
ARR36-C.不要對兩個并不指向同一個數(shù)組的指針進行相減或比較
ARR37-C.不要把一個指向非數(shù)組對象的指針加上或減去一個整數(shù)
ARR38-C.如果結(jié)果值并不引用合法的數(shù)組元素,不要把指針加上或減去一個整數(shù)
第8章 字符和字符串(STR)
建議和規(guī)則
風(fēng)險評估匯總
相關(guān)規(guī)則和建議
STR00-C.使用適合的類型表示字符
STR01-C.采納和實現(xiàn)一致的字符串管理計劃
STR02-C.對傳遞給復(fù)雜子系統(tǒng)的字符串?dāng)?shù)據(jù)進行凈化
sTR03-C.不要意外地截斷null結(jié)尾的字節(jié)字符串
sTR04-C.使用普通char類型表示基本字符集中的字符
STR05-C.引用字符串常量時使用const指針
STR06-C.不要以為stl"tok()會使解析的字符串不被修改
STR07-C.使用TR2473l修正現(xiàn)在的字符串操縱代碼
STR08-C.使用托管字符串開發(fā)新的字符串操縱代碼
STR30-C.不要試圖修改字符串常量
STR31-C.保證字符串的存儲具有足夠的空間容納字符數(shù)據(jù)和null結(jié)尾符
STR32-C.根據(jù)需要將字符串用null結(jié)尾
STR33-C.正確地判斷寬字符串的長度
STR34-C.在轉(zhuǎn)換為更大的整型長度時把字符轉(zhuǎn)換為無符號類型
STR35-C.不要把未檢查邊界來源的數(shù)據(jù)復(fù)制到固定長度的數(shù)組
STR36-C.不要指定用字符串常量初始化的字符數(shù)組的邊界
STR37-C.字符處理函數(shù)的參數(shù)必須能夠用unsignedchar表示
第9章 內(nèi)存管理(MEM)
建議和規(guī)則
風(fēng)險評估匯總
相關(guān)規(guī)則和建議
MEM00-C.在同一個模塊、同一個抽象層中分配和釋放內(nèi)存
MEM01-C.在free()之后立即在指針中存儲一個新值
MEM02-C.把內(nèi)存分配函數(shù)的調(diào)用結(jié)果立即轉(zhuǎn)換為指向被分配類型的指針
MEM03-C.及時清除存儲在可復(fù)用資源中的敏感信息
MEM04-C.不要執(zhí)行零長度的分配
MEM05-C.避免大型的堆棧分配
MEM06-C.保證敏感數(shù)據(jù)不會被寫入到磁盤
MEM07-C.保證calloc()的參數(shù)相乘后可以用size-t表示
MEM08-C.只把realloc()用于改變動態(tài)分配數(shù)組的大小
MEM09-C.不要假設(shè)內(nèi)存分配函數(shù)會對內(nèi)存進行初始化
MEM10-C.定義和使用指針驗證函數(shù)
MEM30-C.不要訪問已經(jīng)被釋放的內(nèi)存
MEM31-C.動態(tài)分配的內(nèi)存只應(yīng)釋放一次
MEM32-C.檢測和處理內(nèi)存分配錯誤
MEM33-C.使用正確的語法表示靈活數(shù)組成員
MEM34-C.只釋放動態(tài)分配的內(nèi)存
MEM35-C.為對象分配足夠的內(nèi)存
第10章 輸入/輸出(FL0)
建議和規(guī)則
風(fēng)險評估匯總
相關(guān)規(guī)則和建議
FI000-C.在創(chuàng)建格式字符串時應(yīng)該小心
F1001-C.調(diào)用通過文件名標(biāo)識文件的函數(shù)時必須小心
F1002-C.對來自不信任來源的路徑名進行標(biāo)準(zhǔn)化
FI003-C.不要對。fopen()和文件的創(chuàng)建作出假設(shè)
FI004-C.檢測和處理輸入和輸出錯誤
FI005-C.使用多個文件屬性標(biāo)識文件
FI006-C.創(chuàng)建具有正確訪問權(quán)限的文件
FI007-C.用fseek()代替rewind()
FI008-C.在打開的文件上調(diào)用:remove()時應(yīng)該小心
FI009-C.跨系統(tǒng)傳輸二進制數(shù)據(jù)時應(yīng)該小心
FI010-C.使用rename()函數(shù)時應(yīng)該小心
FI011-C.指定fopen()的mode參數(shù)時應(yīng)該小心
FI012-C.使用setvbuf()代替setbuf()
FI013-C.不要壓回多于1個的字符
FI014-C.理解文件流的文本模式和二進制模式的區(qū)別
F1015-C.保證文件操作在安全目錄中執(zhí)行
F1016-C.通過創(chuàng)建jail限制對文件的訪問
F1030-C.排除格式字符串中的用戶
……
第11章 環(huán)境
第12章 信號
第13章 錯誤處理
第14章 其他
附錄

本目錄推薦

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