Como faço para fazer Wisa agir como lâmpada (protegendo .mp3s no iis)
Pergunta
Eu criei alguns pequenos widgets flash que fluem .mp3 áudio de um host Apache/PHP. O arquivo MP3 não pode ser acessado diretamente e não o salva no cache dos navegadores.
Para fazer isso, defina a permissão do arquivo MP3 no host como "Proprietário: Read/Write" (Numérico Valor 600). Isso faz com que apenas meu arquivo .php possa ler o .mp3.
Então eu faço uma solicitação ao meu arquivo php do meu ActionScript e ele transmite o MP3 para o meu widget. (Se o cliente/usuário olhar no cache dos navegadores, o arquivo mp3 não for encontrado como desejado)
Este é o código PHP que transmite o arquivo:
<?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();
?>
Alguém sabe como reproduzir esse comportamento usando o 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?
Solução
Você não está realmente protegendo os MP3s, apenas ofuscando -os. Qualquer um ainda pode salvá -los, especialmente se eles apenas iniciarem um depurador HTTP como Fiddler para descobrir o que as chamadas HTTP estão sendo feitas. O fato de você defini -los para não armazenar em cache e passar por um script PHP não ajuda muito.
Para obter o mesmo efeito usando asp.net, você escreveria um HTTPHandler
(provavelmente apenas fora de um .ashx), configure todos os cabeçalhos da mesma maneira usando context.Response.Headers
, então carregue o .mp3 arquivo usando System.IO.FileStream
e envie isso para context.Response.OutputStream
. Olho para cima System.Web.HTTPHandler
, System.IO.FileStream
, e System.Web.HTTPResponse
no MSDN para mais informações.