儿童聊天应用:UITextField含违禁词时阻止消息上传Firebase的方案咨询
嘿,这个需求太贴合儿童应用的安全要求了!我给你整理一套既安全又易维护的最优实现方案,分步骤来:
最优实现方案
1. 构建可维护的恶意词汇过滤逻辑
首先得把过滤规则抽成独立模块,方便后续更新词汇列表。建议用一个单独的结构体来封装,还能兼顾大小写不敏感和精准匹配:
// 可以放在ContentFilter.swift这类专用文件里 struct ContentFilter { // 这里放你要过滤的恶意词汇,后续可扩展 private static let forbiddenWords = ["idiot", "butthead"] // 检查文本是否包含恶意词汇,用正则匹配完整单词避免误杀(比如不会把"idiots"当成违规) static func containsForbiddenContent(_ text: String) -> Bool { let lowercasedText = text.lowercased() for word in forbiddenWords { // \b 表示单词边界,确保匹配完整词汇 let regexPattern = "\\b\(word)\\b" guard let regex = try? NSRegularExpression(pattern: regexPattern, options: .caseInsensitive) else { continue } let matchCount = regex.numberOfMatches( in: lowercasedText, options: [], range: NSRange(location: 0, length: lowercasedText.utf16.count) ) if matchCount > 0 { return true } } return false } }
2. 发送按钮的核心逻辑处理
在发送按钮的点击事件里,先做过滤检查,再决定是关闭控制器还是上传消息:
@IBAction func sendButtonTapped(_ sender: UIButton) { guard let inputText = messageTextField.text?.trimmingCharacters(in: .whitespacesAndNewlines), !inputText.isEmpty else { // 处理空输入的情况,比如提示用户输入内容 return } // 检查是否包含恶意词汇 if ContentFilter.containsForbiddenContent(inputText) { // 按需求直接关闭视图控制器 self.dismiss(animated: true, completion: nil) // 可选优化:关闭前可以给个友好提示,比如弹个alert说"不可以说不礼貌的话哦😯" return } // 正常流程:上传消息到Firebase let messageData: [String: Any] = [ "text": inputText, "senderId": currentUserId, // 替换成你的当前用户ID "timestamp": Timestamp(date: Date()) ] Firestore.firestore().collection("messages").addDocument(data: messageData) { error in if let error = error { print("消息上传失败:\(error.localizedDescription)") return } // 上传成功后清空输入框 self.messageTextField.text = "" } }
3. 可选的体验与安全加固
- 实时输入提示:在用户输入时就实时检测,禁用发送按钮或显示警告,不用等到点击发送才反馈:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { let currentText = textField.text ?? "" let updatedText = (currentText as NSString).replacingCharacters(in: range, with: string) // 根据输入内容启用/禁用发送按钮 sendButton.isEnabled = !updatedText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty && !ContentFilter.containsForbiddenContent(updatedText) return true }
- 云端二次过滤:防止用户绕过本地逻辑(比如越狱设备篡改代码),可以在Firebase Cloud Functions里加一层校验,当有新消息写入时自动检查,违规则直接删除文档。
- 动态更新词汇表:把恶意词汇放在Firebase Remote Config里,不用发版本就能随时更新过滤规则,灵活性拉满。
内容的提问来源于stack exchange,提问作者akvag
相关产品推荐
相关产品推荐

