php - 如何配置 Firebase 安全规则以仅允许来自 CURL/PHP 源的写入?

标签 php firebase firebase-security

我想在 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/

相关文章:

php - 如何将 PHPMyAdmin SQL 转储文件导入 mySQL 数据库?

firebase - 如何从 flutter 中的异步任务检索到的数据中将图像加载到卡中?

java - list 合并失败: Attribute application@appComponentFactory cant solve this

authentication - 如何使用 Firebase 登录多个社交服务?

javascript - 设置 firebase 后出现以下错误 : Client doesn't have permission to access the desired data

php - PHP/Python 中的死人开关

php - MySQL 到 Redis 在一个巨大的表上,如何加快速度?

php - 使用 SSH 连接编辑代码时使用 Xdebug 进行 VSCode 远程调试

javascript - 如何知道电子邮件是否已经在firebase身份验证中注册,javascript?

javascript - 将时间戳与 00 :00:00 of today? 进行比较的 Firebase 数据库规则