Как заставить WISA действовать как LAMP (защита .mp3-файлов в IIS)
Вопрос
Я создал несколько небольших флеш-виджетов, которые передают аудио в формате .mp3 с хоста Apache/php.К mp3-файлу нельзя получить прямой доступ, и он не сохраняется в кеше браузера.
Для этого я установил разрешение файла mp3 на хосте на «владелец:чтение/запись» (числовое значение 600).Благодаря этому только мой файл .php может читать файлы .mp3.
Затем я делаю запрос к своему php-файлу из моего ActionScript, и он передает mp3 в мой виджет.(Если клиент/пользователь просматривает кеш браузера, файл mp3 не найден должным образом)
Это php-код, который передает файл:
<?php
ob_start();
header("Expires: Mon, 20 Dec 1977 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Content-Type: audio/mpeg");
@readfile($_GET["file"]);
ob_end_flush();
?>
Кто-нибудь знает, как воспроизвести это поведение с помощью IIS/ASP.Net?
1.) Make it so a file is only accessible to a file on the server.
2.) Stream that file using an .ASPX or .ASHX?
Решение
На самом деле вы не защищаете MP3, а просто запутываете их.Любой желающий по-прежнему может их сохранить, особенно если он просто запустит HTTP-отладчик, такой как Fiddler, чтобы выяснить, какие HTTP-вызовы выполняются.Тот факт, что вы установили для них режим некэширования и использования PHP-скрипта, не сильно помогает.
Чтобы получить тот же эффект с помощью ASP.NET, вы должны написать HTTPHandler
(вероятно, недалеко от .ashx), настройте все заголовки одинаково, используя context.Response.Headers
, затем загрузите .mp3 файл с использованием System.IO.FileStream
и отправьте это context.Response.OutputStream
.Искать System.Web.HTTPHandler
, System.IO.FileStream
, и System.Web.HTTPResponse
на MSDN для получения дополнительной информации.