不受控制的格式字符串¶
ID: swift/uncontrolled-format-string
Kind: path-problem
Security severity: 9.3
Severity: error
Precision: high
Tags:
- security
- external/cwe/cwe-134
Query suites:
- swift-code-scanning.qls
- swift-security-extended.qls
- swift-security-and-quality.qls
将不受信任的格式字符串传递给使用 printf
样式格式化的函数可能会导致缓冲区溢出和数据表示问题。攻击者可能利用此漏洞使程序崩溃或从其内部状态中获取敏感信息。
建议¶
对格式字符串使用常量字符串字面量,以防止从不受信任的来源进行数据流。这也有助于防止格式参数与格式字符串不匹配的错误。
如果格式字符串不能为常量,请确保它来自安全的数据源或编译到源代码中。如果你需要包含来自用户的字符串值,请在格式字符串中使用适当的说明符(例如 %@
),并将用户提供的 value 作为格式参数包含在内。
示例¶
在此示例中,格式字符串包含用户控制的 inputString
print(String(format: "User input: " + inputString)) // vulnerable
要修复它,请将 inputString
作为格式参数而不是格式字符串的一部分,如下面的代码所示
print(String(format: "User input: %@", inputString)) // fixed