在我的代码中,我使用了fprintf.我使用flawfinder检查代码是否存在漏洞,我得到了:
358:[4](格式)
fprintf:如果格式字符串可能受到攻击者的影响,则可以利用它们.使用常量作为格式规范.
有人可以向我解释一下格式规范使用常量实际意味着什么吗?有安全版fprintf吗?
问题是fprintf通过检查格式字符串来确定应该获得多少个参数.如果格式字符串与实际参数不一致,则您具有未定义的行为,可以表现为安全漏洞.
如果提供的字符串可能会受到程序用户的影响,那么问题尤其严重,因为他可以专门设计字符串以使程序执行不良操作.
fprintfC标准中没有安全版本.C++流避免了这个问题,代价是没有格式字符串,并且使用了更详细的语法来指定格式化选项.
一个常量字符串,如字符串文字中所示.
像
fprintf(someFile, "%s", someStringVariable);
Run Code Online (Sandbox Code Playgroud)
而不是喜欢
fprintf(someFile, someStringVariable);
Run Code Online (Sandbox Code Playgroud)