You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

儿童聊天应用: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:16:46