Javascript 防止HTML标记的Firebase规则

Javascript 防止HTML标记的Firebase规则,javascript,html,firebase,firebase-realtime-database,firebase-security,Javascript,Html,Firebase,Firebase Realtime Database,Firebase Security,我有一个firebase实时数据库,允许用户发布评论,然后显示给其他用户 有没有办法添加一个规则来验证没有提交HTML标记?例如: This is my <b>comment</b> which I <text style="color:red;">have edited</text> 这是我编辑的评论 现在我知道我可以在用户端使用javascript进行检查,但我需要将文本添加为.html()而不是.text(),因此我认

我有一个firebase实时数据库,允许用户发布评论,然后显示给其他用户

有没有办法添加一个规则来验证没有提交HTML标记?例如:

This is my <b>comment</b> which I <text style="color:red;">have edited</text>
这是我编辑的评论
现在我知道我可以在用户端使用javascript进行检查,但我需要将文本添加为.html()而不是.text(),因此我认为最好也通过firebase规则进行检查


这是可能的吗?

HTML不是一种普通的语言,使用正则表达式解析HTML通常被建议不要像in和它一样

但是,由于您只是使用它来测试是否存在类似HTML的标记,而不是进行解析,因此您可以只针对正则表达式进行测试

假设您的消息数据结构与此类似:

接口消息数据{
作者:string,
内容:字符串,
/* ... */
}
并将它们作为
/messages/someMessageId
存储在数据库中,您可以使用应用测试:

{
“规则”:{
“信息”:{
“$msgId”:{
“内容”:{
//消息必须是字符串,并且不包含任何类似HTML的标记
.validate:“newData.isString()&&!newData.val()。匹配(/]*>/)”
}
}
}
}
}

注意:另一种方法是,在将邮件添加到数据库之前,或在响应已发布的邮件时,使用一个清理程序来发布邮件,然后对邮件进行清理。任何一种方法都允许以安全的方式对输入执行更深入的分析。

在客户端JS中执行此检查几乎毫无意义,因为它很容易解决。您需要清理服务器端的输入。您正在使用哪个数据库?RTDB和Firestore的语法不同。@samthecodingman实时数据库
{
  "rules": {
    "messages": {
      "$msgId": {
        "content": {
          // a message must be a string and not contain any HTML-like tags
          ".validate": "newData.isString() && !newData.val().matches(/<[^>]*>/)"
        }
      }
    }
  }
}