如何使用开发人员工具保护azure blob存储URL不被任何人检索

问题描述 投票:1回答:2

我必须在azure blob中保存图像/视频,然后在我的网站中使用它们。在做了一些研究之后,我发现你必须在href标签中包含blob url,以便从azure中检索图像/视频。

但是,任何人都可以打开网站页面并获取该blob网址并滥用它。该网站还具有用户身份验证,因此只有在登录后,用户才能在网站页面上看到该图像/视频。

有没有其他方法从天蓝色检索blob?或者在开发人员工具中公开显示网址的任何其他解决方案?

我目前正在使用Visual Studio的azure模拟器。

azure url html5-video blob azure-storage-blobs
2个回答
1
投票

我重新创建了一个Azure函数,它实现了我提到的第一个场景。存储帐户中的Blob URL未公开,容器及其中的所有内容都设置为私有。由于我不知道您的身份验证方案,我现在暂时忽略了这一点,但您可以通过多种方式确保这一点。

这段代码中有一些快捷方式,但你会得到一般的想法。这是代码:

public static async Task<HttpResponseMessage> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "files/{id}")]
    HttpRequest req, string id, TraceWriter log)
{
    var account = CloudStorageAccount.Parse("UseDevelopmentStorage=true");
    var client = account.CreateCloudBlobClient();
    var container = client.GetContainerReference("sitecontent");
    var blob = container.GetBlockBlobReference(id);

    var stream = new MemoryStream();
    await blob.DownloadToStreamAsync(stream);
    stream.Seek(0, SeekOrigin.Begin);

    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
    result.Content = new StreamContent(stream);
    result.Content.Headers.ContentType =
            new MediaTypeHeaderValue("application/octet-stream");

    return result;
}

我通过从像这样的HTML文件引用它来测试它:

<img src="http://localhost:7071/api/files/techdays2017.jpg" alt="Me at TechDays 2017" />

我使用的图像是267KB,当使用存储模拟器进行本地测试时,函数的响应时间都<200 ms。


0
投票

不确定问题是否有效,但另一个非常简单的方法可能是

  1. 将自定义域与存储终结点一起使用
  2. 使您的blob和容器保密
  3. 使用后端infra,生成一个只能在短时间内有效的共享访问令牌。
  4. 使用SAS生成blob网址。

如果你需要完全隐藏结构,所有步骤都可以用于与@rick回答中提到的功能结合。

有一点需要理解,视频流需要转到浏览器播放器,因此不能有任何完美的计划。上述选项也只是限制访问时间。可能还有一些其他选项,如消息层加密,服务器通过加密内容发送它,并且它将在运行时解密您需要有一些自定义播放器功能,这可能会导致服务器端更高的费用。

如果他有技能和高动力,即使这不会盗用视频用户,但是可以以某种方式使其变得困难,这应该是驱动点。

参考:https://docs.microsoft.com/en-us/azure/storage/common/storage-dotnet-shared-access-signature-part-1

© www.soinside.com 2019 - 2024. All rights reserved.