- 필수 기능
- 시작하기
- 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/realm-nosql-injection
Language: Unknown
Severity: Error
Category: Security
CWE: 943
This rule detects potential NoSQL injection vulnerabilities in iOS applications using the Realm database. The vulnerability occurs when a Realm query predicate is constructed by concatenating a static string with untrusted user input.
An attacker could provide specially crafted input that alters the logic of the NoSQL query. A successful exploit could allow the attacker to bypass authentication, access or modify sensitive data, or disrupt the application’s functionality.
To remediate this, avoid building queries using string concatenation. Instead, use parameterized queries with NSPredicate
, which safely separates the query logic from user-provided values. For example, use NSPredicate(format: "name = %@", userInput)
instead of "name = '\(userInput)'"
.
import RealmSwift
class User: Object {
@objc dynamic var username = ""
@objc dynamic var isAdmin = false
}
func findUser(username: String) {
let realm = try! Realm()
// --- NON-COMPLIANT ---
// The query predicate is built by concatenating a string with user input
// *directly inside the filter call*. This pattern is detected by the rule.
let results = realm.objects(User.self).filter("username = '" + username + "'")
print("Found \(results.count) users.")
}
// Example usage
findUser(username: "guest' OR isAdmin = true")
import Foundation
import RealmSwift
class User: Object {
@objc dynamic var username = ""
@objc dynamic var isAdmin = false
}
func findUserSafely(username: String) {
let realm = try! Realm()
// --- COMPLIANT ---
// The query uses NSPredicate, which safely handles user input.
// There is no `additive_expression` here for the rule to find.
let safePredicate = NSPredicate(format: "username = %@", username)
let results = realm.objects(User.self).filter(safePredicate)
print("Found \(results.count) users.")
}
// Example usage
findUserSafely(username: "guest' OR isAdmin = true")