2

我想在 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=$auth 替换 .json?auth=MYTOKEN

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

多谢你们。

4

1 回答 1

4

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

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

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

如果您自己生成了令牌(在这种情况下您可能应该这样做),那么您只需将一个变量添加到令牌中,例如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"

如果您想在不编写脚本的情况下快速创建自定义令牌,您可以使用我为自己的修补而创建的这个小提琴。

于 2014-01-19T18:33:28.023 回答