2012-06-21 42 views
4
fprintf(pFile,msg.c_str()); 

爲什麼會在Xcode警告:爲什麼我在使用fprintf的C代碼中得到警告?

Format string is not a string literal (potentially insecure) 

我想我得到這樣的警告,以防止攻擊是味精中含有某些東西一樣%s其流堆到屏幕上,直到它到達空終止。在這種情況下是否有安全的方式使用fprintf

+4

'fprintf中(PFILE 「%s」,msg.c_str());'做的。 –

+0

@DanielFischer添加爲答案? – Default

回答

13

你可以給一個格式字符串,

fprintf(pFile, "%s", msg.c_str()); 

或使用fputs

fputs(msg.c_str(), pFile); 
10

爲什麼你的編譯器警告你的是,你的打印字符串的方式可能導致漏洞的原因如果用戶能夠以某種方式影響msg的內容到可以放入自己的格式說明符(「%n」等)的範圍內,則稱爲「格式字符串利用」。建議的答案(fprintf(pFile,「%s」,msg.c_str());)修復了這個問題,因爲格式字符串現在是常量。

你可以閱讀更多有關格式串漏洞就在這裏:http://julianor.tripod.com/bc/formatstring-1.2.pdf

相關問題