我的应用程序使用谷歌的AngularJS Firebase身份验证。当用户注册到应用程序时,它会在数据库中创建该用户的条目,如下所示:
user
->Firebase Unique Key
-> UserId: "google ID"
-> User Name: "User Name"
-> Payment Status:"No"
现在,一旦用户登录,用户将看到付款选项,一旦付款完成,该特定ID的数据库值将根据“付款状态”填充,如上面的JSON所示。一旦付款状态为“是”,则只允许用户查看主页。
我创建了如下所示的安全规则:
{
"rules": {
".read": "true",
"user":{
".write": "auth.provider == 'google' && auth.uid!=null"
}
}}
现在的问题是:任何可以使用谷歌登录的用户都有权写入该数据库。因此,一旦用户获得授权,用户就可以在数据库中进行更改。用户还可以从localhost运行自己的代码,并可以对数据库进行更改。我不希望任何用户侵入数据,将支付状态标记为“是”,然后进入主网站。
如何确保授权用户不会在此数据库中执行任何恶意活动。
Firebase使用基于身份的安全模型:根据用户的身份保护对数据的访问。一旦您授权用户编写特定属性,他们就可以编写该属性。
在您的用例中,允许用户更改其支付状态似乎是个坏主意。因此,他们不应该拥有对该属性的写访问权限,无论他们运行的是你的应用程序还是他们自己的代码。
因此,必须在该字段中设置另一个实体。这可以是人工管理员或服务器。
人际交往并不像你想象的那么罕见。许多web服务都是从所有者检查付款并更新受保护的元数据(场景中的付款状态)开始的。一旦这变得难以管理,你可能已经准备好接受另一种选择了。
服务器可以在受信任的凭据下运行,执行必要的检查,然后设置用户的支付状态。请注意,这不一定是一个非常强大的服务器,因为它所做的只是与Firebase数据库交互。请参阅本文以获得良好的解释。
到目前为止,我只能在阅读firebase文档后得出以下结论:
服务器如何使用这些来确保请求是有效的?主要是为什么其他人不能直接从应用程序中提取这些参数,然后创建另一个“邪恶”应用程序,该应用程序对“邪恶”使用相同的参数。 “邪恶”将包括使用从真实应用程序中获取的相同凭据创建一个不同的应用程序,使用普通的电子邮件/密码注册表单根据真实应用程序中包含的相同凭据注册用户,然后一旦用户被注册,就会做更多的“邪恶”。 2)快速检查... 最后,openid-conne
对于Web/JSON请求,我们不希望向客户端公开整个域模型。本例中的模式之一是使用DTO对象,然后从域模型映射到DTO,然后再映射回来。 DTO的示例是在JSON请求中使用的LoginUserDTO: 此外,我们还有一个用户POJO,它被注释为具有更多属性的实体。通过使用LoginUserDTO,我们可以保护要更新的用户实体的其他字段 然而,拥有多个DTO会造成代码重复,是否有可能避免这种重复?我
问题内容: 我希望有 多个 MySQL用户能够发出类似的命令 但是我也希望这些用户中的每一个都只能看到和访问他们 自己的 数据库。 我所能找到的就是如何由DBA创建数据库并将该数据库的特权授予特定用户: 或将所有数据库的特权授予用户: 但是我也不想要,因为它需要扩展和安全。 问题答案: 您可以使用 授予用户名称以开头的所有数据库的用户特权。 这允许测试用户创建限制于以testuser_开头的名称的
我正在做一个我想在firebase实时数据库上运行的项目。我用以下格式创建了一个数据库设置: 我的安全规则如下所示: 我试图存档,每个人都可以阅读“马”、“图像”和“视频”中的详细信息,但只有经过身份验证的用户才能在“马”、“图像”和“视频”中添加自己的条目(由firebase auth提供的用户ID检查)。 我的第一个问题是:我应该把“图像”和“视频”作为“马”的子对象吗?如果我能为马写一条读写