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