【问题标题】:Firebase Realtime Database: What's the right security rule for a landing page?Firebase 实时数据库:登陆页面的正确安全规则是什么?
【发布时间】:2017-05-09 10:45:52
【问题描述】:
我的登录页面是一个即将推出的页面,其中包含用户的姓名、电子邮件地址等订阅号召性用语。用户无需经过身份验证即可订阅。他可以是任何随机访问此页面的人。我觉得规则应该是“.read”:false,“.write”:true。但谷歌警告我说 write:true 将允许任何人写入数据库,即使是不使用该应用程序的人。
我觉得这很自然,直到我输入验证码或其他东西。如何解决此类问题(订阅中的垃圾邮件预防或即将推出的带有表单的页面)?
【问题讨论】:
标签:
firebase
firebase-authentication
firebase-security
spam-prevention
【解决方案1】:
仅使用安全规则可以防止滥用(它不会阻止各种垃圾邮件,因为您应该使用验证码和其他解决方案),您可以在 Firebase 上设置电子邮件身份验证并请求电子邮件确认。转到身份验证 > 登录方法 > 启用电子邮件。
当您在数据库中保存用户电子邮件和用户名时,您可以在数据库中创建一个“用户”节点并将其保存在 Firebase 分配给该用户的用户 ID 下。
(0TTUf...是Firebase分配的id)
Firebase 将要求输入密码,因为您不需要订阅用户,您只需要保留他们的电子邮件和密码,只需为所有用户分配一个模拟密码即可。
看起来像这样:
由于您只是为自己捕获电子邮件和姓名,并且不需要对用户进行身份验证,因此我不明白您为什么要授予用户写入或读取权限。只需在程序中执行逻辑即可保存此数据。
那么您的规则将如下所示:
{
"rules": {
".read": false,
".write": false
}
}
在您自己管理数据库时,不允许任何用户读取或写入您的数据库。
总结:请求姓名和电子邮件,分配密码,将此数据发送到
Firebase 以新用户身份登录,将电子邮件和姓名保存在
/users/$user_id