可能的重复:
SnowLeopard Xcode 警告:“格式不是字符串文字,也没有格式参数” https://stackoverflow.com/questions/1677824/snowleopard-xcode-warning-format-not-a-string-literal-and-no-format-arguments
我收到这行代码的以下问题。
“格式字符串不是字符串文字(可能不安全)”
NSLog([NSString stringWithFormat:@"%@", entered]);
有什么建议么?
编译器希望我们使用 NSString 常量作为格式字符串(第一个参数NSLog
)因为它可以防止可能违反安全性的众所周知的漏洞。例如,您可以按如下方式更改发布的代码以使编译器满意:
NSLog(@"%@", [NSString stringWithFormat:@"%@", entered]);
EDIT
当然,上面的内容可以(并且应该)简单地写成如下:
NSLog(@"%@", entered);
安全漏洞的性质
不受控制的格式字符串[1] 是一种软件漏洞,
1999 年左右发现,可用于安全漏洞。
以前被认为无害的格式字符串漏洞可用于
使程序崩溃或执行有害代码。问题源于
在某些情况下使用未经检查的用户输入作为格式字符串参数
执行格式化的 C 函数,例如printf()
。一个恶意的
用户可以使用%s
and %x
除其他外,格式化令牌以打印数据
来自堆栈或内存中可能的其他位置。一也可以
使用以下命令将任意数据写入任意位置%n
格式标记,
哪些命令printf()
和类似的函数来写入数量
字节格式化为存储在堆栈上的地址。
典型的漏洞利用
使用这些技术的组合来强制程序覆盖
库函数的地址或堆栈上的返回地址
带有指向某些恶意 shellcode 的指针。填充参数为
格式说明符用于控制输出的字节数和
这%x
token 用于从堆栈中弹出字节直到开始
已达到格式字符串本身的值。格式字符串的开头
被精心设计为包含该地址%n
然后可以格式化令牌
用要执行的恶意代码的地址覆盖。
资料来源:维基百科不受控制的格式字符串 http://en.wikipedia.org/wiki/Uncontrolled_format_string
[1]: http://cwe.mitre.org/data/definitions/134.html http://cwe.mitre.org/data/definitions/134.html“CWE-134:不受控制的格式字符串”。常见弱点枚举。米特雷。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)