如何通过Firestore规则阻止特定HTML标签存入Firestore?
如何通过Firestore规则阻止特定HTML标签存入数据库
你可以利用Firestore规则的字符串正则匹配功能,通过自定义函数检查字段内容是否包含禁止的HTML标签,再将这个验证逻辑加入写入权限的判断条件中。
具体实现示例
以下是修改后的规则代码,以禁止<script>、<iframe>、<style>这几个风险标签为例:
service cloud.firestore { match /databases/{database}/documents { function isClaims(claim) { return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.claims[claim]; } // 自定义函数:检查内容是否包含禁止的HTML标签 function hasForbiddenTags(content) { // 正则匹配指定标签(忽略大小写,覆盖带属性的标签写法) return content.matches('(?i)<script.*?>|</script>|<iframe.*?>|</iframe>|<style.*?>|</style>'); } match /foo/{id} { allow get; allow list: if request.query.limit <= 111; allow write: if isClaims("foo") == true // 验证需要检查的字段(示例为content、title,可根据实际调整) && !hasForbiddenTags(request.resource.data.content) && !hasForbiddenTags(request.resource.data.title); } } }
关键说明
- 正则逻辑:
(?i)表示忽略大小写,确保<Script>这类大小写混合的标签也会被拦截;.*?用于匹配标签内的属性内容,避免漏判<script src="xxx">这类带属性的标签。 - 多字段适配:如果需要检查多个字段,只需逐个添加
!hasForbiddenTags(字段名)的判断条件即可。 - 双重验证保障:你已在客户端完成输入验证,规则层的验证可以进一步拦截恶意绕过客户端校验的请求,形成双重防护。
内容的提问来源于stack exchange,提问作者Raheut Rahwana
相关产品推荐
相关产品推荐

