如何使WISA像LAMP一样(在IIS上保护.mp3s)

时间:2020-03-06 14:28:31  来源:igfitidea点击:

我创建了一些小的Flash小部件,它们从Apache / php主机流式传输.mp3音频。无法直接访问mp3文件,并且无法将其自身保存到浏览器缓存中。

为此,我将主机上的mp3文件权限设置为"所有者:读/写"(数值600)。这样一来,只有我的.php文件可以读取.mp3.

然后,我从ActionScript向我的php文件发出请求,并将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,只是混淆了它们。任何人仍然可以保存它们,尤其是如果它们只是启动了Fiddler之类的HTTP调试器以找出正在进行的HTTP调用时。我们将它们设置为不缓存并通过PHP脚本的事实并没有多大帮助。

为了使用ASP.NET达到相同的效果,我们需要编写一个HTTPHandler(可能只是一个.ashx),并使用context.Response.Headers以相同的方式设置所有标头,然后加载.mp3文件使用" System.IO.FileStream"并将其发送到" context.Response.OutputStream"。在MSDN上查找" System.Web.HTTPHandler"," System.IO.FileStream"和" System.Web.HTTPResponse"以获取更多信息。