moea_joint_essay
112年
[統計資訊] 資料庫及資料探勘、程式設計
第 一 題
📖 題組:
四、下列程式經審閱後有嚴重的安全性威脅,可讓使用者執行不被允許的指令,請回答下列問題:(3 題,共 15 分) #include
#include
int main() {
char username[16];
char password[16];
printf("Enter your username: ");
gets(username);
printf("Enter your password: ");
gets(password);
if (strcmp(username, "testuser") = = 0 && strcmp(password, "testpwd ") = = 0) {
printf("Access granted!\n");
} else {
printf("Access denied!\n");
}
return 0;
}
四、下列程式經審閱後有嚴重的安全性威脅,可讓使用者執行不被允許的指令,請回答下列問題:(3 題,共 15 分) #include
📝 此題為申論題,共 3 小題
小題 (一)
請說明該程式具有何種安全性威脅?(3 分)
思路引導 VIP
說明這段 C 程式碼使用了 gets() 函數,這是一個不安全的函數,容易導致緩衝區溢位 (Buffer Overflow)。
小題 (二)
請說明此安全性威脅如何造成危害及其運作原理?(6 分)
思路引導 VIP
解釋緩衝區溢位如何運作以及危害。gets() 不會檢查輸入長度。如果輸入的字串超過預先配置的字元陣列長度 (16 byte),多出來的資料將會覆蓋記憶體中相鄰的資料。駭客可以藉此覆蓋堆疊(stack)中的變數或返回位址(return address),執行任意惡意程式碼或改變程式執行流程。
小題 (三)
為改善上述程式,請提出修訂作法。(6 分)
思路引導 VIP
提出如何防範緩衝區溢位,主要是使用安全的輸入函式,例如 fgets() 替換 gets()。