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

标签 iphone objective-c ios security secure-coding

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

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

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

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

最佳答案

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

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

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

NSString 没有“安全”版本。

关于iphone - 如何防止 iOS 上的格式字符串攻击和缓冲区溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12946664/

相关文章:

objective-c - 容器 View Controller 示例

iphone - 如何同时使用 CGAffineTransformMakeScale 和 Rotation?

ios - 仅为可见的 UITableViewCells 下载图像

c++ - 在 Objective C++ 中加载 Nib 和显示窗口

iphone - 允许一个 View 支持多个方向,而其他 View 则不支持 iPhone

ios - 如何在单个 ImageView 中添加多个图像并每 2 秒连续显示所有图像

iphone - 根据状态修改 UIButtons 层

iphone - 模块与 ios 中的旧版本兼容吗?

iphone - ASIHTTPRequest 在模拟器上工作,但在 iPhone 上不工作

ios - Firebase 身份验证登录必须允许单一设备登录