MASTG-TEST-0084: 测试调试代码和详细错误日志
此测试即将更新
此测试目前可使用,但将作为新的 OWASP MASTG v2 指南 的一部分进行全面修订。
请通过提交 PR 来帮助我们:MASTG v1->v2 MASTG-TEST-0084:调试代码和详细错误日志测试 (ios)
概述¶
静态分析¶
您可以采用以下静态分析方法来检查日志语句:
- 将应用程序的代码导入 Xcode。
- 在代码中搜索以下打印函数:
NSLog
、println
、print
、dump
、debugPrint
。 - 找到其中一个后,确定开发人员是否在日志记录函数周围使用了包装函数,以便更好地标记要记录的语句; 如果是这样,请将该函数添加到您的搜索中。
- 对于步骤 2 和 3 的每个结果,确定是否设置了宏或与调试状态相关的保护,以在发布版本中关闭日志记录。 请注意 Objective-C 如何使用预处理器宏的变化
#ifdef DEBUG
// Debug-only code
#endif
在 Swift 中启用此行为的过程已更改:您需要在方案中设置环境变量,或者在目标的构建设置中将其设置为自定义标志。 请注意,以下函数(允许您确定应用程序是否在 Swift 2.1 发布配置中构建)不推荐使用,因为 Xcode 8 和 Swift 3 不支持这些函数
_isDebugAssertConfiguration
_isReleaseAssertConfiguration
_isFastAssertConfiguration
.
根据应用程序的设置,可能存在更多日志记录函数。 例如,当使用 CocoaLumberjack 时,静态分析会略有不同。
对于“调试管理”代码(内置):检查情节提要,看看是否存在任何流程和/或视图控制器提供与应用程序应支持的功能不同的功能。 此功能可以是任何内容,从调试视图到打印的错误消息,从自定义存根响应配置到写入应用程序文件系统或远程服务器上的文件的日志。
作为开发人员,只要确保调试语句永远不会出现在应用程序的发布版本中,将调试语句合并到应用程序的调试版本中就不应该成为问题。
在 Objective-C 中,开发人员可以使用预处理器宏来过滤掉调试代码
#ifdef DEBUG
// Debug-only code
#endif
在 Swift 2(使用 Xcode 7)中,您必须为每个目标设置自定义编译器标志,并且编译器标志必须以“-D”开头。 因此,当设置调试标志 DMSTG-DEBUG
时,您可以使用以下注释
#if MSTG_DEBUG
// Debug-only code
#endif
在 Swift 3(使用 Xcode 8)中,您可以在 Build settings/Swift compiler - Custom flags 中设置 Active Compilation Conditions。 Swift 3 没有预处理器,而是使用基于已定义条件的条件编译块
#if DEBUG_LOGGING
// Debug-only code
#endif
动态分析¶
应该在模拟器和设备上执行动态分析,因为开发人员有时会使用基于目标的函数(而不是基于发布/调试模式的函数)来执行调试代码。
- 在模拟器上运行应用程序,并在应用程序执行期间检查控制台中的输出。
- 将设备连接到 Mac,通过 Xcode 在设备上运行应用程序,并在应用程序执行期间检查控制台中的输出。
对于其他“基于管理器”的调试代码:在模拟器和设备上点击应用程序,看看是否可以找到允许预先设置应用程序配置文件、允许选择实际服务器或允许选择来自 API 的响应的任何功能。