安全指南C語言_第1頁
安全指南C語言_第2頁
安全指南C語言_第3頁
安全指南C語言_第4頁
安全指南C語言_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、目 錄1.范圍22.術(shù)語和定義23.C代碼開發(fā)安全指南23.1.變量初始化23.2.指針引用23.3.緩沖區(qū)操作23.4.格式化字符串33.5.整數(shù)溢出43.6.外部程序調(diào)用43.7.重要信息的處理43.8.函數(shù)返回值43.9.句柄和內(nèi)存資源43.10.循環(huán)條件43.11.隨機數(shù)43.12.競爭條件53.13.內(nèi)存釋放53.14.口令驗證51. 范圍本部分規(guī)定了系統(tǒng)中所運行的軟件程序在開發(fā)和設計過程中所應遵循的編碼安全規(guī)范。2. 術(shù)語和定義無3. C代碼開發(fā)安全指南3.1. 變量初始化n 應該仔細審視程序中的每條代碼執(zhí)行路徑,確保任何情況下變量都會被正確的初始化。3.2. 指針引用n 在使用指

2、針前應該檢查其是否為空,不要依賴于外部調(diào)用所做的檢查。n 確保對資源的檢查和使用的順序是正確的,避免先使用后檢查的錯誤情況出現(xiàn)。3.3. 緩沖區(qū)操作n 慎用strcpy及不帶有長度參數(shù)的串操作函數(shù),如 strcpy / scanf / fscanf / strcat / sprintf / vsprintf函數(shù)等,應該使用替代函數(shù)。可以選用以下方案:1、使用C庫安全的串函數(shù)在C庫中,對于上面提到的每一個不帶有長度參數(shù)的串操作函數(shù),都有與其對應的帶有長度參數(shù)的函數(shù),你應該盡可能的使用這些“更安全”的函數(shù)。scanf類:scanf(const char *fomrat,);fscanf(FILE

3、*fp, const char *fomrat,);sscanf(const char *str, const char *fomrat,); strcpy類:strncpy(char *dest,const char *src,size_t n);wcsncpy(wchar_t *dest,const wchar_t *src,size_t n);strncat(char *dest,const char *src,size_t n);wcsncat(wchar_t *dest, const wchar_t *src,size_t n);printf類:snprintf(char *str,

4、 size_t size, const char *format, );vsnprintf(char *str,size_t size,const char *format,va_list ap);2、使用自己封裝的安全串函數(shù)也可以自己定義一套更適合你的開發(fā)環(huán)境的安全串操作函數(shù),比如:OpenBSD 開發(fā)人員自己開發(fā)了更安全一些的串操作函數(shù):size_t strlcpy (char *dst, const char *src, size_t size); size_t strlcat (char *dst, const char *src, size_t size);3、使用其他的安全函數(shù)庫使

5、用一個提供安全串操作函數(shù)的函數(shù)庫也是一個很好的選擇,類似的庫在互聯(lián)網(wǎng)上很容易找到,如:Safestr庫。n 在使用內(nèi)存操作函數(shù)時,應該檢查傳遞給這些函數(shù)的長度參數(shù),確認你正確的使用了長度參數(shù),保證它們是恰當?shù)?、與目標緩沖區(qū)相適應的。n 注意處理多字節(jié)編碼轉(zhuǎn)換的例程,確保用于存放轉(zhuǎn)換后內(nèi)容的緩沖區(qū)長度大小合適,避免在進行編碼轉(zhuǎn)換后的,提供了一個大小不能滿足所有編碼情況的緩沖區(qū)。n 在使用下標訪問數(shù)組元素時,要充分考慮下標的合理取值范圍,尤其需要避免下標取值等同于數(shù)組大小的問題出現(xiàn)。3.4. 格式化字符串n 應該盡量避免使用外部數(shù)據(jù)作為格式化串參數(shù)。n 如果必須使用格式化串作參數(shù),那必須確保在使用

6、前進行了足夠的檢查,一定要過濾格式化參數(shù)串中的“%n”。3.5. 整數(shù)溢出n 避免存在將一個整數(shù)賦給無法容納其值的數(shù)據(jù)類型的變量的情況出現(xiàn)。n 應該盡量使用size_t等指示了明確用途的數(shù)據(jù)類型。n 要對整數(shù)運算的結(jié)果進行檢查,防止整數(shù)溢出。n 慎用array變量形式定義數(shù)組,如確有需要,一定要確保用來指定數(shù)組的變量取值在合理范圍。3.6. 外部程序調(diào)用n 應該對system()/ execv系列函數(shù)的參數(shù)進行足夠檢查,確保違背你意圖的字符、符號等內(nèi)容被過濾。3.7. 重要信息的處理n 應該安全存放重要的信息,對敏感內(nèi)容要進行加密。n 給用戶的提示信息不要冗余,提示信息應盡量高效精簡,避免泄漏

7、應用程序的版本、帳號相關(guān)的信息。n 保存密鑰不要采用硬編碼的方法。3.8. 函數(shù)返回值n 對帶有返回值的函數(shù)進行調(diào)用后,一定要認真檢查返回值并進行相應的處理,不要依賴于假設的條件。3.9. 句柄和內(nèi)存資源n 確保使用的資源在任何調(diào)用路徑下都能得到及時的、正確的釋放。 3.10. 循環(huán)條件n 確認循環(huán)的退出條件考慮的足夠充分,在任何情況下都要避免死循環(huán)。3.11. 隨機數(shù)n 正確獲取隨機數(shù),避免假隨機或弱隨機。應該遵守以下原則:1) 盡量少使用C的標準隨機數(shù)函數(shù),如:rand()、srand()、random()、srandom()等函數(shù)。2) 在Unix/Linux平臺上,盡量避免從/dev/urandom設備讀取低質(zhì)量隨機數(shù)序列。3) 在Unix/Linux平臺上,盡可能從/dev/random設備讀取高質(zhì)量隨機數(shù)。3.12. 競爭條件n 充分考慮資源使用的時間性和唯一性,防止競爭條件的出現(xiàn)。應該遵守以下原則:1) 確保程序在使用某個資源(比如文件、設備、對象或者變量)時擁有自己的專有權(quán),這可以通過使用加鎖或原子化操作等方法實現(xiàn)。2) 盡量避免使用通過文件名進行操作的函數(shù),而多使用通過描述符來進行操作的函數(shù)。如盡量用fstat()代替stat()。這將避免某些情況下的文件被替換問題。3.13. 內(nèi)存釋放n 釋放內(nèi)存后應正確重置

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論