我正在準備面試,並且由一位在那裏工作的朋友給出了這段代碼,並且說我會詢問關於安全性的一些問題。我對事物的這一面並不瞭解,並且希望能夠學習一點,所以我至少可以說我應該問一些問題。利用示例困惑?
這是代碼:
#include <stdio.h>
#include <string.h>
#include <limits.h>
int main(int argc, char *argv[]){
FILE *inputFile;
char filename[128];
char strings[USHRT_MAX][40];
unsigned short c = 0;
strcpy(filename, argv[1]);
inputFile = fopen (filename, "r");
if (inputFile == NULL) {
perror("Error: ");
return(-1);
}
while (fscanf(inputFile, "%s", strings[c++]) != EOF);
fclose(inputFile);
return(0);
}
我知道它有一個漏洞做能緩衝區溢出,因爲這是他告訴我這是什麼,但除此之外,我被困。有人可以解釋爲什麼這個代碼很脆弱嗎?
'strcpy(filename,argv [1]);'oops。 – nneonneo 2013-03-19 21:14:58
'fscanf(inputFile,「%s」,strings [C++])'oops。 (這兩個溢出中的哪一個更糟糕取決於堆棧佈局) – nneonneo 2013-03-19 21:16:51
我想如果你不知道它是怎麼做到的,你可能不適合工作 – 2013-03-19 21:16:55