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

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

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

定 價(jià):¥69.00

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

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

內(nèi)容簡(jiǎn)介

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

作者簡(jiǎn)介

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

圖書目錄

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

本目錄推薦

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