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 小題
小題 (二)
請說明此安全性威脅如何造成危害及其運作原理?(6 分)
思路引導 VIP
解釋 gets() 函數不會檢查輸入長度,當輸入超過宣告大小 (16 bytes) 時,資料會覆寫記憶體中相鄰的堆疊區域 (Stack),改變變數值甚至覆寫返回位址 (Return Address)。
小題 (一)
請說明該程式具有何種安全性威脅?(3 分)
思路引導 VIP
指出程式碼中使用了不安全的 gets() 函數,這會導致緩衝區溢位漏洞。
小題 (三)
為改善上述程式,請提出修訂作法。(6 分)
思路引導 VIP
建議使用安全版本的字串讀取函數如 fgets() 取代 gets(),並限定讀取的最大長度以防止溢位。