我正在编写一个必须从文件中找到子字符串的应用程序 将此子字符串写入某个不同的文件。为了写入文件,我使用fputs,但有人告诉我检查更安全的版本以写入文件。
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?
有人可以解释“fputs”在安全方面的漏洞是什么。?
由于fwrite需要将字符数写入文件,这是否会使fwrite比fput更安全?
答案 0 :(得分:2)
没风险。
只要你的字符串被正确终止,就不会发生任何不好的事情。
然而在这里:
strstr
NULL
的结果理论上可能是NULL
,因此您可能会尝试写var i = 0;
function hello () {
document.getElementById('demo').innerHTML += "<li id= '"+ i +"'>hello'" + i +"'</li>";
$('#' + i).addClass('animated bounceInUp');
if (i < 5) {
setTimeout(hello, 5000);
}
i++;
}
hello();
来破坏您的程序。
此处没有代码注入的风险。
答案 1 :(得分:2)
我不相信fputs
以任何固有的方式是危险的。
我认为that other question被误认为是错误的。
由于明确的计数,您询问fwrite
是否比fputs
更安全。我不认为我们可以这么说;我相信这会削减两种方式:
fputs
处理以null结尾的字符串,因此如果您不小心传递了一个未正确终止空字符串的字符串,fputs
将会离开结尾,并且会发生奇怪的事情可能会发生。程序员肯定会犯这个错误。
但它偶然会将错误的计数传递给fwrite
。特别是,如果您正在编写(您认为是)以空字符结尾的字符串,那么您可能会调用fwrite(str, 1, strlen(str), fp)
,这显然会出现完全相同的问题。