- 필수 기능
- 시작하기
- Glossary
- 표준 속성
- Guides
- Agent
- 통합
- 개방형텔레메트리
- 개발자
- Administrator's Guide
- API
- Datadog Mobile App
- CoScreen
- Cloudcraft
- 앱 내
- 서비스 관리
- 인프라스트럭처
- 애플리케이션 성능
- APM
- Continuous Profiler
- 스팬 시각화
- 데이터 스트림 모니터링
- 데이터 작업 모니터링
- 디지털 경험
- 소프트웨어 제공
- 보안
- AI Observability
- 로그 관리
- 관리
",t};e.buildCustomizationMenuUi=t;function n(e){let t='
",t}function s(e){let n=e.filter.currentValue||e.filter.defaultValue,t='${e.filter.label}
`,e.filter.options.forEach(s=>{let o=s.id===n;t+=``}),t+="${e.filter.label}
`,t+=`ID: swift-security/log-injection
Language: Unknown
Severity: Warning
Category: Security
CWE: 117
The application logs data that appears to originate from an untrusted source, such as a user-editable text field or a web view, without proper neutralization. This can lead to a log injection vulnerability.
An attacker could insert fake log entries, corrupt the log format, or inject malicious content (e.g., stored XSS payloads) that could be executed by a log viewing application. This manipulation can be used to cover tracks, mislead administrators, or attack other systems that consume the logs.
To mitigate this vulnerability, all untrusted input should be validated and sanitized before being written to logs. Specifically, newline characters (\r
, \n
) and other control characters should be removed or escaped to prevent log entry forgery.
import UIKit
import WebKit
import os.log
class UserProfileViewController: UIViewController, WKNavigationDelegate {
var nicknameField: UITextField!
var webView: WKWebView!
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = navigationAction.request.url {
// --- VULNERABLE ---
// The 'query' part of a URL can contain malicious input.
print("Processing navigation action with query: \(url.query ?? "none")")
}
decisionHandler(.allow)
}
}
import UIKit
import WebKit
import os.log
class UserProfileViewController: UIViewController, WKNavigationDelegate {
var nicknameField: UITextField!
var webView: WKWebView!
// A helper function to sanitize strings before logging.
// It removes characters that could be used to forge log entries.
private func sanitizeForLogging(_ input: String) -> String {
return input.replacingOccurrences(of: "\r", with: "")
.replacingOccurrences(of: "\n", with: "")
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = navigationAction.request.url, let query = url.query {
// --- FIXED ---
// The query string is sanitized before being logged.
let sanitizedQuery = sanitizeForLogging(query)
print("Processing navigation action with sanitized query: \(sanitizedQuery)")
}
decisionHandler(.allow)
}
}