Firebase存储安全性读取规则被忽略

时间:2016-09-02 09:04:28

标签: android firebase firebase-security firebase-storage

在尝试为Android应用编写Firebase存储安全规则时,我遇到了一些意外行为。

为了测试一个简单的案例,我写了以下规则:

<div id="getnewsletterModal" class="newsletterReveal reveal-modal small" data-reveal aria-labelledby="modalTitle" aria-hidden="true" role="dialog">
<div class='iframe-container-newsletter'>
    <iframe id="iframeNewsletter" src="" scrolling="no" style='border:0'></iframe>
</div>
<a class="close-reveal-modal" aria-label="Close">&#215;</a>

效果是,如果我使用授权的写入uid - “6EP13cYABCciskhKwMTaXYZHS5g1”登录我的应用程序,我只能上传文件 - 但无论我登录哪个uid,我仍然可以读取文件。所以似乎只有写规则实际上是有效的;读取规则被忽略了。

为了进一步测试,我将规则重写为:

var appendIFrameNewsletter = true;
    $(".getnewsletterModal").click(function() {
        if(appendIFrameNewsletter) {
            $('#iframeNewsletter').attr('src', '[url here]');
            appendIFrameNewsletter = false;
        }
    });

这使我能够在登录我的应用程序时上传和读取文件:再次看起来只有写入规则有效。

有人能想到这可能的解释吗?

1 个答案:

答案 0 :(得分:2)

您在问题的评论中解释说,您使用getDownloadUrl()来获取文件的网址。然后将URL传递给Glide,后者读取文件。 getDownloadUrl()的文档指出URL可用于共享文件:

  

异步检索具有revokable的长期下载URL   令牌。这可以用来与其他人共享文件,但也可以   如果需要,由Firebase控制台中的开发人员撤消。

这向我建议,URL实际上是文件的“可共享链接”,并且当使用URL访问文件时,Firebase存储中定义的安全规则不适用。人们可以想到许多无法应用规则的情况。例如,当在Glide请求中使用URL时,请求不包含有关请求者的登录UID的信息,它只包含URL。

如果您想通过URL限制对文件的访问,我认为您只能通过限制对URL本身的访问来实现这一目的。