在生产中使用服务器端firebase-admin(实时数据库)允许所有读/写权限是安全的吗?



我正在使用基于相当简单的概念的firebase的实时数据库产品的firebase-admin包在Python中构建一个web应用程序。我定期抓取XML API服务并检查数据中的更新。如果有更新,我会提醒不需要登录或身份验证的用户获取这些更新。

我一直小心不提交我的私钥(在firebase json生成的文件)源代码控制和所有的代码是服务器端。在生产环境中允许完全的读/写权限是否存在安全风险,例如使用以下Firebase规则:

{
"rules": {
".read": "true",
".write": "true"
}
}

由于这个用例相当简单,我无法在其他地方找到这个问题的明确答案。提前谢谢。

除了esqew的出色回答之外,您可能要考虑通过管理SDK访问Firebase的代码已经具有对Firebase项目的完全管理访问权限,并且绕过了安全规则.

因此,如果只有Python代码与数据库交互,您可以通过将规则更改为

来消除大部分风险:
{
"rules": {
".read": false,
".write": false
}
}

通过这个简单的更改,使用客户端SDK或REST API的用户将无法访问数据。


如果您的终端用户确实需要读访问,请考虑将您的规则调整到他们需要的最小值(esqew也提到了最小权限原则)。

例如,如果您有一个名为alerts的节点用于警报,那么只需将规则更改为这样就可以提高安全性:

{
"rules": {
"alerts": {
".read": false
},
".write": false
}
}

使用这些规则,恶意用户需要已经知道存在alerts节点,然后才能访问其中的数据。虽然这不是一个强大的屏障,但它将有助于防止最常见的附加形式:恶意用户只是试图读取数据库的根目录。

在生产中允许完全读/写权限是否存在安全风险…?

在生产环境中,一般来说,您希望努力尽可能地遵循最小特权原则。链接文章很好地总结了这一点:

…最小特权原则……要求……每个模块(如进程、用户或程序,取决于主题)必须只能访问其合法目的所必需的信息和资源。

同样,一般来说,几乎从来没有一个用例需要数据库范围的读/写访问(除了某些特权守护进程之类的)。

虽然自己现在可能正在积极采取措施防止暴露您的私钥或其他可能使用的凭据数据,但它并没有考虑到未来(现实的)攻击场景,即这些凭据/密钥被内部人员恶意泄露,无意中被其他开发人员提交到源代码控制中,甚至通过依赖项中的漏洞提取,这些漏洞目前尚未广为人知。在上述所有场景中,最低权限限制了这些不良行为者可能对您的系统和数据造成的损害。

简而言之——你应该只允许访问那些绝对必要的表/对象对于有问题的代码。其他任何操作都构成了很大程度上不必要的风险,尤其是在生产级环境中。

最新更新