Как защитить URL-адреса хранилища BLOB-объектов Azure от использования кем-либо с помощью инструментов разработчика - PullRequest
0 голосов
/ 24 мая 2018

Я должен сохранить изображения / видео в лазурных каплях, а затем использовать их на своем сайте.Проведя некоторые исследования, я обнаружил, что вам нужно включить URL-адрес большого двоичного объекта в тег href для изображения / видео, которое нужно извлечь из лазури.

Однако любой может открыть страницу сайта и получить этот URL-адрес большого двоичного объекта и неправильно его использовать.,Также на сайте есть аутентификация пользователя, следовательно, только после входа в систему пользователь сможет увидеть это изображение / видео на странице сайта.

Есть ли другой способ получения больших двоичных объектов из лазури?Или какое-либо другое решение для URL-адреса, которое открыто отображается в инструментах разработчика?

В настоящее время я использую эмулятор Azure с Visual Studio.

An example of a test site which is showing a video stored as a blob

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Не уверен, что вопрос правильный, но другой очень простой подход может быть

  1. Использовать пользовательский домен с конечной точкой хранения
  2. Сделать ваши двоичные объекты и контейнеры приватными
  3. с помощью внутреннего интерфейса создайте токен общего доступа, который должен быть действителен только в течение короткого времени.
  4. Используйте SAS для создания URL-адресов BLOB-объектов.

В случае, если вам необходимо полностью скрыть структуру, все шаги можно использовать в сопряжении с функциями, упомянутыми в ответе @ rick.

Одна вещь, которую нужно понять, - это видео потокнужно перейти в браузер плеер, поэтому не может быть никакого идеального плана.Вышеуказанная опция также ограничит время доступа.Могут быть и другие параметры, например, шифрование на уровне сообщений, с помощью которого сервер отправляет зашифрованное содержимое, и оно будет расшифровано во время выполнения. Вам необходимо иметь некоторые пользовательские функции проигрывателя, а также это может повлечь за собой более высокие расходы на стороне сервера.

Даже это не даст пользователю пиратского видео, если у него есть навык и высокая мотивация, но это может как-то усложнить это, и это должно стать движущей силой.

Ссылка: https://docs.microsoft.com/en-us/azure/storage/common/storage-dotnet-shared-access-signature-part-1

0 голосов
/ 24 мая 2018

Я заново создал функцию Azure, которая реализует первый упомянутый мной сценарий.URL-адрес BLOB-объекта внутри учетной записи хранения не был открыт, а контейнер и все, что в нем, настроено как личное.Поскольку я не знаю вашу схему аутентификации, я пока что пропустил ее, но вы могли бы обезопасить ее несколькими способами.

В этом коде есть несколько ярлыков, но вы поймете общую идею.Вот код:

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" />

Используемое изображение было 267 КБ, время отклика функции быловсе <200 мс при локальном тестировании с использованием эмулятора хранилища.</p>

...