2013-03-08 27 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

相关问题