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?
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top