如何修复fprintf漏洞?

Avr*_*dis 3 c c++ printf

在我的代码中,我使用了fprintf.我使用flawfinder检查代码是否存在漏洞,我得到了:

358:[4](格式)fprintf:如果格式字符串可能受到攻击者的影响,则可以利用它们.使用常量作为格式规范.

有人可以向我解释一下格式规范使用常量实际意味着什么吗?有安全版fprintf吗?

Seb*_*edl 8

问题是fprintf通过检查格式字符串来确定应该获得多少个参数.如果格式字符串与实际参数不一致,则您具有未定义的行为,可以表现为安全漏洞.

如果提供的字符串可能会受到程序用户的影响,那么问题尤其严重,因为他可以专门设计字符串以使程序执行不良操作.

fprintfC标准中没有安全版本.C++流避免了这个问题,代价是没有格式字符串,并且使用了更详细的语法来指定格式化选项.


Som*_*ude 6

一个常量字符串,如字符串文字中所示.

fprintf(someFile, "%s", someStringVariable);
Run Code Online (Sandbox Code Playgroud)

不是喜欢

fprintf(someFile, someStringVariable);
Run Code Online (Sandbox Code Playgroud)