我为这行代码得到了以下问题.
"格式字符串不是字符串文字(可能不安全)"
NSLog([NSString stringWithFormat:@"%@", entered]);
Run Code Online (Sandbox Code Playgroud)
有什么建议?
jle*_*ehr 139
编译器希望我们为格式字符串(第一个参数NSLog
)使用NSString常量,因为它可以防止可能违反安全性的相当知名的漏洞.例如,您可以按如下方式更改发布的代码,以使编译器满意:
NSLog(@"%@", [NSString stringWithFormat:@"%@", entered]);
Run Code Online (Sandbox Code Playgroud)
编辑
当然,上述内容可以(而且应该)简单地写成如下:
NSLog(@"%@", entered);
Run Code Online (Sandbox Code Playgroud)
安全漏洞的性质
不受控制的格式字符串 [1]是一种在1999年左右发现的软件漏洞,可用于安全漏洞.以前认为无害的格式字符串漏洞可用于崩溃程序或执行有害代码.问题源于在执行格式化的某些C函数中使用未经检查的用户输入作为格式字符串参数,例如
printf()
.恶意用户可以使用%s
和%x
格式化令牌等来从堆栈或可能的存储器中的其他位置打印数据.也可以使用%n
格式令牌将任意数据写入任意位置,该命令printf()
和类似函数将格式化的字节数写入存储在堆栈中的地址.典型的漏洞使用这些技术的组合来强制程序用指向某些恶意shellcode的指针覆盖库函数的地址或堆栈上的返回地址.格式说明符的填充参数用于控制输出的字节数,
%x
令牌用于从栈中弹出字节,直到达到格式字符串本身的开头.格式字符串的开头被精心设计为包含%n
格式标记随后可以用要执行的恶意代码的地址覆盖的地址.
来源:维基百科不受控制的格式字符串
[1]:http://cwe.mitre.org/data/definitions/134.html "CWE-134:不受控制的格式字符串".常见的弱点列举.麦特.
Jha*_*iya 31
这是解决方案.
试试吧
NSLog(@"%@",entered);
Run Code Online (Sandbox Code Playgroud)
因为NSLog也可以为你做格式化...
归档时间: |
|
查看次数: |
45054 次 |
最近记录: |