我正在编写一个应用程序,它必须从文件中找到子字符串,并将这个子字符串写入某个不同的文件中。对于写入文件,我使用的是fput,但有人告诉我要检查写入文件的更安全的版本。
while (fgets(line, MAX_LINE_LEN, fp1) != NULL) {
if (pname_count < 1) {
if (strstr(line, p_name)) {
pname_count++;
fputs(strstr(line, p_name), fp2);// danger.
continue;
}
}
//Remaining code
}点击了下面的两个链接,但没有得到我的确切答案。
gets() and fputs() are dangerous functions?
有人能解释一下“fput”在安全性方面的脆弱性是什么吗?
由于fwrite需要写入文件的字符数,这是否使fwrite比fput更安全?
发布于 2018-03-17 16:53:23
我不认为fputs在本质上是危险的。我相信that other question是错误的,因为它暗示这是。
您问到,由于显式计数,fwrite是否比fputs更安全。我认为我们不能这么说;我认为这是双向的:
fputs处理以null结尾的字符串,所以如果您意外地传递了一个没有正确地以null结尾的字符串,fputs将会偏离结尾,并且可能会发生奇怪的事情。程序员当然会犯这个错误,,
fwrite。特别是,如果您正在编写(您认为是)以null结尾的字符串,则可能会调用fwrite(str, 1, strlen(str), fp),这显然会遇到完全相同的问题。发布于 2018-03-17 16:50:12
没有风险。
只要字符串被正确终止,就不会有什么不好的事情发生。
然而,在这里:
fputs(strstr(line, p_name), fp2);从理论上讲,strstr的结果可能是NULL,因此您可能会在尝试编写NULL时导致程序崩溃。
不过,这里没有代码注入的风险。
https://stackoverflow.com/questions/49334133
复制相似问题