问题标签 [firebase-security]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1804 浏览

firebase - Firebase 多浏览器选项卡进行身份验证

我正在使用angularFireAuth并且 angularFireAuth 提供了一个登录的用户变量。假设$scope.user.id我用它来验证当前用户是否登录。我也angularFireAuth.logout()用来注销用户。

在单个打开的浏览器选项卡上一切正常。

但它不适用于多个选项卡。

  • 该选项卡的登录 1WILL NOT登录其他选项卡并设置登录variables
  • 选项卡的注销 1DOES NOT清除其他选项卡variables并注销。

所以这意味着

我打开了 2 个标签,我称之为tab Atab B。当我注销或登录选项卡 A时。

Tab B也不会。同时,如果我提交了一些需要在选项卡 b中进行身份验证的内容(该选项卡 A 已经注销)。我仍然可以提交。(除非我手动刷新)。

0 投票
1 回答
4290 浏览

javascript - 如何确保只有我自己的网站(客户端代码)可以与 Firebase 后端通信?

我读过关于Firebase的文章,它看起来很适合我想做的事情。我已经阅读了有关身份验证以及如何根据规则授权某些登录用户执行不同操作的信息。很好。

但是,我不确定另一种类型的安全性:如何确保只有我自己的站点(使用客户端 javascript)才能与我的 firebase-backend 通信?我之所以问,是因为 afaik 无法阻止任何人从客户端代码(指向我的特定 firebase 后端的 url)中查找我的 firebase 端点并开始使用它,因为天知道是什么。

在我想向匿名用户角色开放写入的情况下,这尤其令人担忧。(例如:一些分析也许)

非常感谢任何有助于清除我的想法的帮助。

0 投票
1 回答
1478 浏览

firebase - 按用户查询 firebase 对象

我有一个看起来像这样的数据结构:

当我查询“/farms”时,我想获取经过身份验证的用户是所有者的农场列表。我还想阻止用户查看他们不是所有者的农场。

我的规则目前如下所示:

我通过将 .read 置于此级别来实现这一点,当通过 /farms/:farmid 访问时,我授予对单个农场的读取访问权限。如果我将“.read”移动到“farms”级别,这将导致授予对整个列表的读取访问权限。

所以我认为我需要重组我的数据,但不确定如何最好地解决这个问题?我不想在用户对象下方添加农场对象,因为我还想向任何给定的农场添加许多“编辑器”用户。

谢谢你的帮助

0 投票
1 回答
449 浏览

angularjs - 如何在复杂的安全规则要求的上下文中对 Firebase 中的数据进行非规范化/结构化?

我最初的标题是“如何在 Firebase 中构建和保护用户(帐户)数据以确保用户访问安全”。因为这是这个问题的领域,但后来我认为可以形成一个更一般的问题。
话虽如此,我对https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html很熟悉,
但是尽管这篇文章很棒,但它并不完全适用于我的问题,所以我走了。


首先,我将使用电子邮件/密码身份验证类型的简单登录(尽管如果验证用户电子邮件必须涉及服务器端编码,则可能使用 Persona 代替)。
我有一个 userData 对象,其中存储了用户数据(读取用户帐户)。要求每个用户只能读取存储在自己帐户中的数据。所有用户将要访问的实际数据将存储在一个名为即将到来的数据的单独节点中。
用户可以访问来自即将到来的数据的哪些数据将取决于用户购买的类型:
具有“订阅”类型的用户将能够访问所有数据,直到他们的订阅到期。我认为“现在”变量可用于通过安全表达式来实现这一点。
那些具有“购买”类型的人只能访问购买的数据(列在数组中)。
admin@mydomain.com 需要能够读取所有用户的所有数据,但只能写入(和读取)到即将到来的数据节点。

所以这是我试图保存到 Firebase 的测试数据结构:

这不起作用,因为'。' 人物。
我应该像这样选择 DOT mangle:

或者我应该在创建到 userData 节点时“推送()”“空”用户帐户并将用户的用户名保存为 {"id" : "admin@mydomain.com"} 属性?
如何在 Firebase 中设置安全规则,以便 userData 的内容在任何时候都可以是只读的,但在成功购买时(比如使用 PayPal)写入除外?
这可以安全地完成而无需求助于服务器代码吗?
我知道我可以设置安全规则,以便只有服务器可以将数据写入 Firebase,但这将涉及服务器端代码,该代码随后将写入适当的数据以响应有效的 PayPal 支付通知 (IPN) - 服务器-side code 我宁愿避免,不仅因为我不是很精通服务器端编码(尽管应该能够成功 node.js),而且因为 LAMP 堆叠共享服务器仍然比所需的 VPS 便宜得多对于 node (aaand 我不能做 php :( )。
客户端代码将使用很棒的 Angular.js / angularFire 组合开发。
感谢你的时间,
Jared

0 投票
1 回答
114 浏览

security - 用于监控 AngularFire (JavaScript/noBackend) 应用程序的系统日志记录?

您好,我正在构建一个 AngularFire 应用程序,但我无法弄清楚如何安全地监控和记录...

  • 尝试登录失败
  • 写入/读取失败
  • HTTP 请求/响应

可以用javascript写这段代码吗?难道恶意用户不能更改代码,所以我将看不到某些日志消息吗?

人们一直在采取哪些解决方案来确保这种功能是安全的?

是否可以编写一条安全规则,说明如果您在应用程序上进行任何类型的活动,它需要附加一条日志消息?

我知道没有什么是万无一失的,但很高兴听到人们提出了哪些安全解决方案。谢谢!!!!!

0 投票
2 回答
3794 浏览

firebase - 管理员用户的安全规则

如何设置我的安全规则,以便只有拥有的用户users/$provider/$user/admin == true才能添加和删除新管理员。

这是我的 Firebase 规则:

我的另一个问题是,我可以混合auth.id不同auth.provider的,它们是独一无二的吗?我想在用户层次结构中删除"$provider": {}它有点难看。

0 投票
1 回答
97 浏览

javascript - 在不读取其内容的情况下找出对象是否具有属性

最好通过向您展示我的规则来解释这一点:

基本上规则(应该)说的是:只有在点击时读写/datasets/$dataset/$secureName。这就是我在不进行身份验证的情况下保护我的应用程序的方式(任何使这一点变得更好的建议都很棒)。

dataset问题是,如果存在dataset同名的,我不想创建一个新的。

我试过这个:

但问题是,dataSnapshot其中包含所有信息,这并不能使我的应用程序非常安全。任何提示都会很棒!谢谢!

0 投票
1 回答
41 浏览

firebase - Updating User's Info without allowing user write ability

How could you setup rules on Firebase which would allow a user to become a paid user of your app? For example, if I have the following data structure:

How could you setup firebase rules to not allow the user to update it themselves (by fudging a request), but still allow it to be updated automatically when they "pay" for your app?

I've thought about randomly generating a number and asking the user to enter that number or something like that, but I don't think that would work... Has anyone done something like this?

0 投票
2 回答
2559 浏览

firebase - 我可以在没有服务器端代码的情况下以安全的方式与 firebase 集成,而无需进行用户身份验证吗?

我的网站只是一个带有表单的页面。我没有任何用户身份验证功能。在不以安全方式通过服务器端代码的情况下,我仍然可以使用客户端 Firebase 集成吗?如果是,我如何确保我的 firebase 连接的详细信息?

0 投票
1 回答
1135 浏览

firebase - 如何在 Firebase 中验证基于电子邮件的转义用户帐户?

我正在使用 Firebase 简单登录的电子邮件/密码身份验证选项。
我将用户的数据与转义的电子邮件一起存储为键,其中“。” 字符已替换为“,”(因为 Firebase 不允许将“。”存储在键中),而不是使用用户 ID 作为键。问题是,在安全规则中,我不能使用正则表达式针对 auth.email 变量对转义的电子邮件进行身份验证。所以我不能做以下事情:

因为每个 $user 看起来像 'some,one@domain,co,uk' 而 auth.email 是 'some.one@domain.co.uk'。
有没有办法解决这个问题?我是否需要将用户 ID 存储在每个 $user 中以使用户身份验证成为可能?在这种情况下,我想将用户数据简单地存储在基于 id 的节点中而不是转义的电子邮件中会更容易。