,我是学电码防伪,我试图做一个安全性分析以下2个片段,从‘编写安全代码’拍摄,第2版:解决安全漏洞在“编写安全代码”'
http://www.di.uniba.it/~ndm/corsi/sa/materiale/lab/StackOverrun.c
http://www.di.uniba.it/~ndm/corsi/sa/materiale/lab/FormatString.c
在第一个我认为唯一的非安全声明 strcpy(buf, input);
这应该是 strncpy(buf, input, sizeof(buf-1));
所有其他PR intf是安全的:尽管他们使用的参数少于他们应该进行的动作,但他们故意这样做。
在第二个再printf
s为安全的,但fprintf(stdout, buf);
是,也不应该与此代码来代替:fprintf(stdout, "%s", buf);
我的问题是pFile = fopen(argv[1], "r");
也被分析程序被认为不安全由于可能的竞争条件但我看不出这可以在这段代码中被利用。如果该文件是以只读方式打开的,那么攻击者可以用它做一些令人讨厌的事情?我想不是。
所以,问题是:你认为这个分析是正确的?你能找到其他缺陷,或者是我的推理被窃听?
谢谢!
您的意思是:http://www.di.uniba.it/~ndm/corsi/sa/materiale/lab/FormatString.c? –
是的,对不起!我不知道它为什么没有出现! –
'strncpy(buf,input,sizeof(buf-1));'仍然是错误的,因为如果源太长,它不会终止目的地。 –