在NSString中格式化字符串攻击

时间:2013-11-07 09:50:55

标签: nsstring string-formatting code-injection

我读过这个:https://developer.apple.com/library/mac/documentation/security/conceptual/SecureCodingGuide/Articles/ValidatingInput.html

但是,我不清楚在使用NSString +stringWithFormat:时如何避免使用用户输入的数据格式化字符串攻击。

1 个答案:

答案 0 :(得分:1)

利用此漏洞的方法是接受用户的格式字符串。

例如,请使用此代码。您有一个带有按钮和文本字段的简单视图,允许用户输入为NSLogged。

- (void)buttonTouchUpInside:(UIButton *)button
{
    NSLog(@"User says:");
    NSLog(self.userInputTextField);
}

如果用户在框中键入crash! %@并点击按钮会发生什么?好吧,他们可能会崩溃。但是,正如链接文章所解释的那样,用户可以使用此攻击向量来操纵堆栈并使您的应用程序执行任意代码。如果这个字符串来自基于互联网的攻击者怎么办?

您应该从不允许用户输入用作格式字符串。编写此代码的安全方法如下。

- (void)buttonTouchUpInside:(UIButton *)button
{
    NSLog(@"User says: %@", self.userInputTextField);
}

这样,如果用户输入crash! %@,您就会看到此内容:

User says: crash! %@