説明
String(format:)、NSString(format:)、NSLog の書式文字列にユーザー入力を使うと、書式指定子が解釈され、例外、情報漏えい、ログの改ざんにつながるおそれがあります。
想定される影響
- 例外の発生やアプリの異常終了
- ログの改ざん
- 意図しないデータの書式処理
対処方法
- 書式文字列は固定の定数にします。
- ユーザーの値は書式引数として渡し、書式文字列に連結したり埋め込んだりしないでください。
- ログには構造化ロギングと適切なマスキング方針を適用します。
例
変更前
swift
let message = String(format: userControlledFormat)
変更後
swift
let message = String(format: "Hello %@", username)
説明:
- 変更前: ユーザー入力が書式文字列として解釈されます。
- 変更後: 書式文字列を固定し、ユーザーの値を引数として渡します。