程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 安全性測驗:測試您的安全性 IQ(1)

安全性測驗:測試您的安全性 IQ(1)

編輯:關於C語言

目錄

錯誤 #1(C 或 C++)

錯誤 #2(C 或 C++)

錯誤 #3(可以是任何語言,示例為 C#)

錯誤 #4

錯誤 #5

錯誤 #6 (C#)

錯誤 #7 (C#)

錯誤 #8 (C#)

錯誤 #9 (C#)

錯誤 #10 (Silverlight CLR C#)

我們都喜歡通過復查代碼來檢查安全性錯誤。甚至可以說,我們對此非常擅長。我們並不是在自誇我們是最好的,但我們通常都可以迅速地找出大量錯誤。你能做到嗎?

如果看到一個安全性錯誤,您能否識別出來?通過進行這一測驗來評估一下。每個代碼示例都至少有一個安全漏洞。嘗試找出錯誤並看一看您的得分。在代碼後面是對這些漏洞、注釋的總結,如果條件允許,還會講述安全性開發生命周期 (SDL) 如何幫助查找這些錯誤。感謝 Peter Torr 和 Eric Lippert 提供輸入和代碼示例。

錯誤 #1(C 或 C++)

void func(char *s1, char *s2) {
 char d[32];
 strncpy(d,s1,sizeof d - 1);
 strncat(d,s2,sizeof d - 1);
 ...
}

答案:我們認為應該先來講一講雖然古老但卻非常便於理解的緩沖區溢出。對許多人而言此代碼已足夠安全,因為代碼使用的是受限的 strncpy 和 strncat 函數。但是,只有當緩沖區大小合適時,這些函數才是安全的,而在本例中緩沖區大小是錯誤的。徹頭徹尾的錯誤。

從技術上講,第一個調用是安全的,但第二個調用卻是錯誤的。strncpy 和 strncat 函數的最後一個參數是緩沖區中保留的空間量,而您剛剛通過調用 strncpy 占用了其中的一部分或全部空間。緩沖區溢出。Michael 在 2004 年發表了一篇博客文章,其中講述了與此完全相同的錯誤類型。

在 Visual C++ 2005 及以後的版本中,警告 C4996 是告訴您應將錯誤的函數調用替換為更安全的調用,而 /analyze 選項會發出 C6053 警告,指出 strncat 可能不會以零終止字符串。

老實說,由於種種原因,strncpy 和 strncat(及其 "n" 同類)要比 strcpy 和 strcat(及其同類)更糟糕。首先,返回值有點多余 — 它是指向緩沖區的指針,而緩沖區可能有效,也可能無效。您沒有辦法知道!其次,獲取正確的目標緩沖區大小的確很難。如果您找出了錯誤,可以給自己加一分。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved