fprintf(pFile,msg.c_str());
为什么我在 Xcode 中收到警告:
Format string is not a string literal (potentially insecure)
我假设我收到此警告以防止攻击是 msg 包含一些内容,例如%s
将堆栈流到屏幕直到它到达空终止。fprintf
在这种情况下有什么安全的使用方法吗?
fprintf(pFile,msg.c_str());
为什么我在 Xcode 中收到警告:
Format string is not a string literal (potentially insecure)
我假设我收到此警告以防止攻击是 msg 包含一些内容,例如%s
将堆栈流到屏幕直到它到达空终止。fprintf
在这种情况下有什么安全的使用方法吗?
您可以提供格式字符串,
fprintf(pFile, "%s", msg.c_str());
或使用fputs
,
fputs(msg.c_str(), pFile);
您的编译器警告您的原因是,如果用户能够以某种方式将 msg 的内容影响到可以放入自己的格式说明符的范围内,那么您打印字符串的方式可能会导致称为“格式字符串漏洞”的漏洞(“%n”等)。建议的答案 (fprintf(pFile, "%s", msg.c_str());) 解决了这个问题,因为格式字符串现在是恒定的。
您可以在此处阅读有关格式字符串漏洞的更多信息:http: //julianor.tripod.com/bc/formatstring-1.2.pdf