Firebase RTDB安全规则中的访问URL参数

时间:2019-01-22 14:14:22

标签: firebase firebase-security firebase-security-rules

我想从Firebase读取数据:

firebase.database().ref('videos/' + $videoId + '/data' ).once('value')

但是在安全规则中,我不想让任何人都可以理解。我也不想使用:

".read" : true

我希望未经身份验证的用户能够通过URL传递具有特殊令牌的数据,从而能够读取它们。

firebase.database().ref('videos/' + $videoId + '/data?token=secretToken').once('value')

我的视频数据如下:

{
vidoes: {
    $videoId: {

        data: {
            ...
        }
        tokens: {
            secretToken: true
        }

    }
}

我想安全规则看起来像这样:

{
vidoes: {
    $videoId: {
        data: {
            ".read": "data.parent().child('tokens/' + auth.urlQuery('token').val() ).exist()"
        }

    }
}

是否有人可以访问Firbase安全规则中的查询字符串/ url参数?我可以使用Firebase函数创建一个api,但这是一个额外的步骤和网络请求。

基本上,它的行为就像是Firebase存储的“令牌”:

https://firebasestorage.googleapis.com/v0/b/columbus-c4de8.appspot.com/o/richContent%2F1-min.jpeg_-LPgLxBMt1tBR0dDdNzH?alt=media&token=dfe24c92-e0c2-484a-81df-c09a710b3d34

如果令牌正确,则用户可以读取数据。

注意:从技术上讲,可以将令牌用于“ .write”安全规则。请参阅:Using newData on Updates in Firebase Security Rules

1 个答案:

答案 0 :(得分:0)

这是不可能的,并且本质上也不安全。如果任何人都有一个简单的密码可以访问数据,则Firebase安全规则将不安全。对移动客户端进行反向工程以增加允许查询的密码非常容易。

如果您想向用户授予查询访问权限,那么唯一安全的方法就是与Firebase身份验证结合使用,该方法可以验证执行请求的人员的身份。