標籤:china-pub 電腦 編碼 安全 c語言
這篇是電腦類的優質預售推薦>>>>《C安全編碼通訊協定:開發安全、可靠、穩固系統的98條規則(原書第2版)》
部分目錄
譯者序
前言
貢獻者簡介
第1章 前置處理器(PRE) 1
1.1 PRE30-C. 不要通過串連建立通用字元名稱 1
1.2 PRE31-C. 避免不安全宏參數的副作用 3
1.3 PRE32-C. 不要在類函數的宏調用中使用前置處理器指令 7
第2章 聲明和初始化(DCL) 9
2.1 DCL30-C. 聲明具有正確儲存持續期的對象 10
2.2 DCL31-C. 在使用前宣告身份識別符 13
2.3 DCL36-C. 不要聲明具有衝突連結類別的標識符 16
2.4 DCL37-C. 不要聲明或者定義保留標識符 18
2.5 DCL38-C. 使用正確文法聲明靈活數群組成員 23
2.6 DCL39-C. 避免在結構填充中泄露資訊 26
2.7 DCL40-C. 不要建立相同函數或者對象的不相容聲明 30
2.8 DCL41-C. 不要在switch語句第一個條件標籤之前聲明變數 35
第3章 運算式(EXP) 37
3.1 EXP30-C. 不要依賴求值順序以避免副作用 38
3.2 EXP32-C. 不要通過非易失性引用訪問易失性對象 42
3.3 EXP33-C. 不要讀取未初始化的記憶體 44
3.4 EXP34-C. 不要對null指標進行解引用 52
3.5 EXP35-C. 不要修改具有臨時生命期的對象 56
3.6 EXP36-C. 不要將指標轉換為更嚴格對齊的指標類型 59
3.7 EXP37-C. 用正確數量和類型的參數調用函數 62
3.8 EXP39-C. 不要通過不相容類型的指標訪問變數 67
3.9 EXP40-C. 不要修改常量對象 72
3.10 EXP42-C. 不要比較填充資料 73
3.11 EXP43-C. 使用restrict限定的指標時避免未定義行為 75
3.12 EXP44-C. 不要向sizeof、_Alignof或者_Generic傳遞有副作用的運算元 82
3.13 EXP45-C. 不要在選擇語句中執行賦值 85
譯者序
曆數各種程式設計語言,可能很難有一種能夠達到C語言的高度。憑藉良好的移植性和跨平台支援,以及高效率的低級處理能力,C語言成為現代最流行作業系統平台的基石,也成為教育、研究和軟體開發中最受人歡迎的語言之一。
C語言靈活的類型轉換和貼近底層機器實現、目標代碼效率高的特性,一直是系統軟體開發人員最為喜愛的,但這也是一把雙刃劍。隨著軟體系統的複雜度不斷提高,編碼中的一些小瑕疵越來越容易暴露出來,從而引發嚴重的安全問題,加之UNIX、Windows等主流作業系統的各種組件大多以C語言編寫,駭客們樂此不疲地尋找著這些方面的漏洞,這給全球的電腦系統安全帶來了嚴重的威脅。
在這種形勢下,制定一種嚴格的安全編碼通訊協定,避免出現可利用的安全性漏洞,就成為IT業界的當務之急。許多大型開發團體都制定了自己的安全編碼通訊協定,國際標準組織也對C語言標準進行了修訂,對C語言實現提出更嚴格的要求,從而為安全編碼提供了基礎。
本編碼通訊協定是業界採納最廣泛的編程指導原則彙編 ,它緊扣各個版本的C語言標準,分門別類地介紹了各種可能引發可利用安全性漏洞的未定義行為、未指定行為,提出了安全編碼的規則和建議,在每條規則和建議上都用現實的相容及不相容程式碼範例加以說明。本書是該標準文檔的第2版,加入了對最新的C11標準的支援,對所有有志於C語言軟體開發的技術人員來說,本書都是不可或缺的參考書。
本書內容極其豐富,正如作者所言,即便是C語言國際標準中,也存在著許多模糊之處,書中的例子和解說文字,就是要揭開層層迷霧,協助讀者認識很多並不那麼明顯但是可能造成嚴重問題的不當編程方法。在翻譯過程中我們也深有體會,書中引用的標準條文中,確實有許多似是而非的東西,也許只有在細細咀嚼書中程式碼片段之後,才能逐步釐清。我們力求再現原書所要闡述的基本原理,希望能夠真正地協助到讀者,但因水平所限,錯誤在所難免,期待廣大讀者批評指正。
本書的翻譯工作主要由姚軍完成,徐鋒、陳志勇、謝志雄、方翊、白龍、林耀成、陳霞、寧懿、吳玥等也對翻譯工作做出了貢獻,在此衷心感謝機械工業出版社華章公司的關敏編輯和其他編審人員做出的辛勤努力。
部分前言
本書為C語言編碼提供了規則。這些規則的目標是開發安全、可靠和穩固的系統,例如,消除可能導致程式意外行為和可利用漏洞的未定義行為。遵循本標準定義的編碼規則是確保C語言開發的軟體系統安全、可靠、穩固的必要條件(但不是充分條件)。安全和穩固的設計也是必要的,安全性關鍵系統通常會提出比編碼通訊協定更嚴格的要求,例如,要求所有記憶體都是靜態分配的。然而,應用本編碼通訊協定將產生高品質的系統,這些系統可靠、健壯並且能夠抵禦攻擊。
每條規則都由一個標題、一段說明和不相容/相容的程式碼範例組成。標題是規則的簡潔描述,但是有時候不夠精確。說明提出了規則的規範要求。不相容程式碼範例是違反規則的程式碼範例。搭配的相容解決方案展示了等價的代碼,這些代碼不違反該規則或者該編碼通訊協定中的任何其他規則。
具有良好文檔、可以實施的編碼通訊協定是C語言編碼必不可少的要素。編碼通訊協定鼓勵程式員遵循由項目需求和組織確定的一組統一規則,而不是簡單地採用程式員熟悉的方法。一旦確定,這些標準可以作為評估原始碼(使用人工或者自動化過程)的指標。
CERT編碼規則為業界廣泛採納。Cisco系統公司在2011年10月的Cisco年度SecCon會議上宣布在其產品開發中採用CERT C安全編碼通訊協定作為基準編程標準。最近,Oracle將所有CERT安全編碼通訊協定整合到現有的安全編碼通訊協定中。注意,這是長期協作中的最新步驟:CERT和Oracle以前合作編寫了《The CERT Oracle Secure Coding Standard for Java》(Addison-Wesley,2011)。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
C安全編碼通訊協定:開發安全、可靠、穩固系統的98條規則(原書第2版)——互動出版網