Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase存储:获取文件相对路径的安全方法?(存储HTML文件)_Firebase_Google Cloud Storage_Firebase Storage_Firebase Security_Banner - Fatal编程技术网

Firebase存储:获取文件相对路径的安全方法?(存储HTML文件)

Firebase存储:获取文件相对路径的安全方法?(存储HTML文件),firebase,google-cloud-storage,firebase-storage,firebase-security,banner,Firebase,Google Cloud Storage,Firebase Storage,Firebase Security,Banner,你好,StackOverflow和Firebase社区 我正试图实现Firebase可能不打算实现的目标:我想在Firebase存储中存储HTML文件夹(在我的例子中是横幅广告) 我的问题是:如何保持从HTML文件到相关JS和图像文件的相对路径 因此,这些文件可以很容易地找到彼此: /路径/to/my/folder/index.html /路径/to/my/folder/main.js /路径/to/my/folder/picture.jpg 如果我将所有文件存储在Firebase存储上,并使用

你好,StackOverflow和Firebase社区

我正试图实现Firebase可能不打算实现的目标:我想在Firebase存储中存储HTML文件夹(在我的例子中是横幅广告)

我的问题是:如何保持从HTML文件到相关JS和图像文件的相对路径

因此,这些文件可以很容易地找到彼此:

/路径/to/my/folder/index.html

/路径/to/my/folder/main.js

/路径/to/my/folder/picture.jpg

如果我将所有文件存储在Firebase存储上,并使用下载的URL访问它们,则这些相对URL不起作用,看起来像
https://firebasestorage.googleapis.com/v0/b/my-project.appspot.com/o/my_folder_300x250%2Findex.html?alt=media&token=12a123a1-1234-1a1a-1234-a1ab123456a1

我可以通过打开Firebase的安全规则使文件无需令牌即可访问,但由于URL参数和转义的文件夹路径,相对路径仍然被破坏


我还通过将谷歌云存储桶公诸于众使其在另一个项目上成功运行。我可以访问这些文件,并使用如下URL保持相对路径:
https://my-project.appspot.com.storage.googleapis.com/path/to/my/folder/my_folder_300x250/index.html
。这很好用,但是有我想要防止的主要安全缺陷,比如列出bucket中的所有文件Firebase存储是围绕云存储构建的,云存储实际上没有目录,而是一个扁平的名称空间。目录是通过存储对象命名约定模拟的:名称可以包含
/
字符,并且在对象名称的开头放置一个“目录”路径会使该对象看起来像是在该“目录”中。看见


因此,您唯一的解决方案(如果您希望独立存储文件)是处理所有引用,将“路径”设置为绝对,并相应地命名文件。正如您所观察到的,您可能还需要考虑所有URL查询参数。

我找到了一个非常简单的解决方案:

在Google Cloud Console中,我创建了一个新角色,该角色具有get访问权限,但没有列表访问权限,并将其应用于
allUsers
,具有以下权限

resourcemanager.projects.get

storage.objects.get

这将暂时解决我的问题,我将继续使用
https://my-project.appspot.com.storage.googleapis.com/path/to/my/folder/my_folder_300x250/index.html
而不是firebase的下载URL()

<html>
...
<script src="main.js">
...
</html>
document.onload = function() {
    myImage.src = 'picture.jpg'
}