首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fputs与fwrite在安全性方面的比较

fputs与fwrite在安全性方面的比较
EN

Stack Overflow用户
提问于 2018-03-17 16:44:42
回答 2查看 8.3K关注 0票数 0

我正在编写一个应用程序,它必须从文件中找到子字符串,并将这个子字符串写入某个不同的文件中。对于写入文件,我使用的是fput,但有人告诉我要检查写入文件的更安全的版本。

代码语言:javascript
复制
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 dangerous in C

有人能解释一下“fput”在安全性方面的脆弱性是什么吗?

由于fwrite需要写入文件的字符数,这是否使fwrite比fput更安全?

EN

回答 2

Stack Overflow用户

发布于 2018-03-17 16:53:23

我不认为fputs在本质上是危险的。我相信that other question是错误的,因为它暗示这是。

您问到,由于显式计数,fwrite是否比fputs更安全。我认为我们不能这么说;我认为这是双向的:

  • fputs处理以null结尾的字符串,所以如果您意外地传递了一个没有正确地以null结尾的字符串,fputs将会偏离结尾,并且可能会发生奇怪的事情。程序员当然会犯这个错误,

  • ,但是,它很容易意外地把错误的计数传递给fwrite。特别是,如果您正在编写(您认为是)以null结尾的字符串,则可能会调用fwrite(str, 1, strlen(str), fp),这显然会遇到完全相同的问题。
票数 4
EN

Stack Overflow用户

发布于 2018-03-17 16:50:12

没有风险。

只要字符串被正确终止,就不会有什么不好的事情发生。

然而,在这里:

代码语言:javascript
复制
fputs(strstr(line, p_name), fp2);

从理论上讲,strstr的结果可能是NULL,因此您可能会在尝试编写NULL时导致程序崩溃。

不过,这里没有代码注入的风险。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49334133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档