我想在 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 脚本提供允许写入的身份验证凭据,我认为您已经基本上捕获了这一点。
如果 MYTOKEN 代表您的 Firebase key (您可能不应该使用它),则会绕过安全规则,因为此 token 在内部设置 admin: true。
因此,您只需将安全规则设置为 ".read": false、".write": false
,这将阻止任何不使用管理 token 的人进行访问。
如果您有generating the token yourself ,(在这种情况下您可能应该这样做)然后您只需将一个变量添加到 token 中,例如 isMyPhpScript: true
,您可以从安全规则中引用该变量。
您可以使用 future 多年的日期来模拟没有到期日的 token ,因此它的工作原理就像您的 secret 一样,但仍然允许您应用安全限制:
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"
如果您想快速创建自定义 token 而不需要编写脚本,您可以 use this fiddle我为自己的修补而创建。
关于php - 如何配置 Firebase 安全规则以仅允许来自 CURL/PHP 源的写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21213489/