【问题标题】:How can I configure Firebase Security Rules to only allow writes from a CURL/PHP source?如何将 Firebase 安全规则配置为仅允许来自 CURL/PHP 源的写入?
【发布时间】:2014-02-08 09:53:22
【问题描述】:

我想在 Firebase 中创建一个安全规则,只允许 PHP 脚本(通过 CURL 请求)写入某个位置。

当安全规则允许任何具有身份验证的人通过将 .json?auth=MYAPPTOKEN 附加到 URL 来读取/写入时,我可以使用 PHP 脚本读取/写入 Firebase。

我还能够包括/排除使用简单登录读取/写入位置的用户,所以我认为我对安全规则语法/操作有基本的处理。

现在,我想在 Firebase 中有一个只能从我的 PHP 文件中写入的位置。

我尝试过的安全规则:

".write":"auth.secret == "MYTOKEN",
".write":"auth == "MYTOKEN",
".write":"auth.token == "MYTOKEN",

另一方面,我尝试修改请求中的 .json?auth=。这是我尝试过的:

$auth = array("token" => "MYTOKEN");
$auth = json_encode($auth);

第二次尝试:

$auth = json_encode("MYTOKEN");

然后将 .json?auth=MYTOKEN 替换为 .json?auth=$auth

那么,如何只允许该脚本写入某个位置?

谢谢大家。

【问题讨论】:

    标签: php firebase firebase-security


    【解决方案1】:

    基本原则是只为您的 PHP 脚本提供允许写入的身份验证凭据,我认为您基本上已经掌握了。

    如果 MYTOKEN 代表您的 Firebase 机密(您可能不应该使用它),那么安全规则将被绕过,因为此令牌在内部设置了 admin:true。

    因此,您只需将安全规则设置为 ".read": false, ".write": false,这将阻止任何不使用管理员令牌的人访问。

    如果您有generating the token yourself,(在这种情况下您可能应该这样做),那么您只需在令牌中添加一个变量,例如isMyPhpScript: true,您可以从您的安全规则中引用该变量。

    您可以通过使用多年后的日期来模拟没有过期的令牌,因此它就像您的秘密一样工作,但仍然允许您应用安全限制:

    var FirebaseTokenGenerator = require("firebase-token-generator");
    var tokenGenerator = new FirebaseTokenGenerator(YOUR_FIREBASE_SECRET);
    var veryFarInFuture = Date.now() + 8e+14;
    var token = tokenGenerator.createToken({ isMyPhpScript: true }, { expires: veryFarInFuture });
    

    现在在你的规则中你可以这样写:

    ".read": "auth.isMyPhpScript === true"
    

    如果你想在不编写脚本的情况下快速创建自定义令牌,可以use this fiddle我为自己的修补创建。

    【讨论】:

    • 这正是我正在寻找的解决方案。谢谢加藤。给未来研究人员的一个注意事项:在 Firebase 中使用“模拟读/写”控制台时,不要复制粘贴使用 Kato 实用程序创建的整个 json,因为令牌生成器会生成身份验证所需的完整 JSON,而 Firebase 接口似乎假设你只给它“d”部分。不过绝对要使用 Kato 的实用程序 - 它很漂亮。
    • 看来 expires: 0 不再意味着永远。我看到 Error: EXPIRED_TOKEN: Auth token is expired {"exp":0,"v":0,"iat":1435608696,"d":{"id":"kato"}} 如果我使用 0 过期。
    • 好收获。尝试the fiddle 并单击过期字段的“最大”。那是等价的。
    猜你喜欢
    • 2018-12-26
    • 2020-07-11
    • 2020-11-22
    • 1970-01-01
    • 2015-03-25
    • 2015-11-22
    • 1970-01-01
    • 2017-06-13
    • 2016-03-23
    相关资源
    最近更新 更多