2013-03-08 26 views
2

說,我們在C.XCode說一些C程序可能不安全?這究竟意味着什麼?

,如果我繼續工作,做到這一點:

char *word; 
word = "Hello friends"; 
printf(word); 

然後XCode的告訴我,因爲我不使用字符串文字,我可能有一些是潛在不安全。這是否意味着開啓某些東西來破解我的程序?如果是這樣,那怎麼會發生?

或者,如果我這樣做:

char *word; 
word = "Hello friends"; 
printf("%s", word); 

然後提出了XCode沒有任何標誌和我很好。究竟有什麼區別?

回答

4

printf的第一個參數不是您想要打印的字符串。這是一個格式字符串。它可以包含格式化指令,這些指令會導致一旦與更多參數組合後打印的字符串。

你的第一個例子是an uncontrolled format string vulnerability

+0

那麼,在這個例子中,格式字符串是被控制的:它是'「Hello friends」',不能是其他任何東西。該消息在不受控制的格式字符串檢測啓發式中是誤報。 – 2013-03-08 20:02:46

2

的問題是,在第一種情況下,如果word包含格式規範(%d%f%s等),則printf()將假定這些值是在棧中,但其實不是,這可能導致一場崩潰。

使用puts()fputs()而不是如果你不關心格式。

+0

謝謝,但我也對潛在的不安全問題感興趣?什麼是Xcode引用? – 2013-03-08 14:25:10

+2

那麼如果字符串「word」來自用戶輸入,可能會導致程序崩潰,從而導致程序打開。如果程序以「root」身份運行,那麼這可能意味着整個系統的妥協。 – trojanfoe 2013-03-08 14:27:04

+0

編譯器發出警告並不意味着存在問題,只是(如評論和答案所言)它可能導致安全問題。 – vonbrand 2013-03-08 14:32:02

相關問題