28. 下列何項「不」是 C 程式語言常見的漏洞?
(A) Buffer Overflows
(B) String Manipulation
(C) Integer Overflow
(D) SQL Injection
答案:登入後查看
統計: A(120), B(143), C(89), D(994), E(0) #3246613
統計: A(120), B(143), C(89), D(994), E(0) #3246613
詳解 (共 3 筆)
#7379229
正確答案是 (D) SQL Injection。
答案解析:
(D) 為什麼「不是」C 語言常見的漏洞:
運作層級不同: SQL Injection(SQL 隱碼攻擊) 屬於應用程式層(Application Layer) 的邏輯漏洞。不論你後端是用 PHP、Java、Python 還是 C 語言寫的,只要程式碼在「串接資料庫查詢指令」時沒有做好參數化過濾,就會發生 SQL Injection。它並不是 C 語言本身語法特性的「專屬原罪」。
考題語境: 在資安檢定中,當題目點名「C/C++ 語言常見漏洞」,標準答案百分之百是在考**「記憶體安全管理不當(Memory Safety)」** 或 「資料型態溢位」 的底層問題,因為 C 語言允許開發者直接操控記憶體指標(Pointer),且沒有內建的安全邊界檢查機制。
(D) 為什麼「不是」C 語言常見的漏洞:
運作層級不同: SQL Injection(SQL 隱碼攻擊) 屬於應用程式層(Application Layer) 的邏輯漏洞。不論你後端是用 PHP、Java、Python 還是 C 語言寫的,只要程式碼在「串接資料庫查詢指令」時沒有做好參數化過濾,就會發生 SQL Injection。它並不是 C 語言本身語法特性的「專屬原罪」。
考題語境: 在資安檢定中,當題目點名「C/C++ 語言常見漏洞」,標準答案百分之百是在考**「記憶體安全管理不當(Memory Safety)」** 或 「資料型態溢位」 的底層問題,因為 C 語言允許開發者直接操控記憶體指標(Pointer),且沒有內建的安全邊界檢查機制。
其他選項說明(皆為經典的 C/C++ 專屬記憶體缺陷):
這三個選項是資訊安全與軟體工程中,只要提到 C/C++ 就必定會綁定在一起的「記憶體三大殺手」:
(A) Buffer Overflows (緩衝區溢位):
成因: C 語言內建的許多老舊字串處理函式(如 strcpy()、sprintf()、gets())在複製資料時,完全不會檢查來源資料的長度是否超過了目的地記憶體陣列(Buffer)所宣告的大小。
危害: 攻擊者可以故意輸入超長惡意字串,把隔壁的記憶體區域(甚至包含函數回傳位址 Return Address)直接覆蓋掉,進而劫持程式的執行流程(Control Flow),讓系統去執行駭客植入的惡意代碼(Shellcode)。
(B) String Manipulation (字串操作不當):
成因: C 語言本身沒有獨立的 "String" 物件,字串純粹是以字元陣列 char[] 的形式存在,且必須以空字元 \0(Null-terminator)作為結束標誌。
危害: 如果在處理字串拼接、複製時漏掉了最後的 \0,或者是格式化字串時發生了 Format String Vulnerability(格式化字串漏洞,例如錯用 printf(user_input)),會導致程式在記憶體中無限往後讀取或寫入,造成嚴重的記憶體洩漏(Information Disclosure)或崩潰。
(C) Integer Overflow (整數溢位):
成因: C 語言中每一種數值型態(如 short、int、unsigned int)在記憶體中都有固定的位元數(Bits)上限。當程式在進行算術運算(加、乘)後的結果超過了該型態能表達的最大值,數值就會「爆炸並繞回」變成極小的負數或 0。
危害: 舉例來說,如果一個緩衝區大小是用這個溢位後的整數來動態配置(例如配置了 0 個位元組),但隨後卻寫入了大量資料,就會直接連動引發 (A) 的緩衝區溢位漏洞,是極為常見的複合型漏洞鏈。
1
0