如何防止 iOS 上的格式字符串攻击和缓冲区溢出?

Posted

技术标签:

【中文标题】如何防止 iOS 上的格式字符串攻击和缓冲区溢出?【英文标题】:How do I prevent format string attacks and buffer overruns on iOS? 【发布时间】:2012-10-18 03:33:17 【问题描述】:

Apple 的 Secure Coding Guide 文档提供了以下方面的指导:

格式字符串攻击 缓冲区溢出

不清楚(对我来说,无论如何)是如何防止使用 NSString 时的格式字符串攻击和缓冲区溢出。

如何防御此类攻击? 我可以申请任何类别来防止这种情况吗? 有没有我可以使用的“安全”NSString 等效项?

【问题讨论】:

【参考方案1】:

当您将数据放入NSString(或NSMutableString)时,缓冲区溢出通常不是问题,因为当您创建NSString 时,您必须告诉它您提供了多少数据,它会自动分配足够的私有存储空间来保存你给它的东西。只需坚持已发布的 API,不要尝试任何恶作剧,例如从 UTF8String 返回的指针中丢弃 const 并通过指针写入。

请注意,NSMutableDataNSMutableString 不同,它提供了 mutableBytes 消息,该消息返回一个指向允许您写入的内存的指针。因此,如果您使用该 API,则必须小心缓冲区溢出。

对于格式字符串,您只需遵循该文档中的建议即可。例如,永远不要将来自不受信任来源的数据作为格式参数传递,甚至作为格式参数的一部分。通常,您的格式字符串应该是字符串文字,或者应该从 NSLocalizedString 返回。

NSString 没有“安全”版本。

【讨论】:

以上是关于如何防止 iOS 上的格式字符串攻击和缓冲区溢出?的主要内容,如果未能解决你的问题,请参考以下文章

参数真的足以防止 Sql 注入吗?

如何处理Android中的防缓冲区溢出技术

日更第17日: (翻)nginx加固之防御缓冲区溢出攻击

怎么解决 LINUX 堆栈溢出内存的问题

C语言:防止缓冲区溢出

C语言:防止缓冲区溢出