如何使 WISA 表现得像 LAMP(保护 IIS 上的 .mp3)
我创建了一些小型 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?
I have created a few small flash widgets that stream .mp3 audio from an Apache/php host. The mp3 file cannot be directly accessed and does not save it self to the browsers cache.
To do this I set the mp3 file permission on the host to "owner: read/write" (numeric value 600). This makes it so that only my .php file can read the .mp3.
Then I make a request to my php file from my ActionScript and it streams the mp3 to my widget. (If the client/user looks in the browsers cache the mp3 file is not found as desired)
This is the php code that streams the file:
<?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();
?>
Does anyone know how to reproduce this behavior using 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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您并没有真正保护 MP3,只是混淆了它们。 任何人仍然可以保存它们,特别是如果他们只是启动像 Fiddler 这样的 HTTP 调试器来找出正在进行的 HTTP 调用。 事实上,您将它们设置为不缓存并通过 PHP 脚本并没有多大帮助。
要使用 ASP.NET 获得相同的效果,您需要编写一个
HTTPHandler
(可能就在 .ashx 上),并使用以相同的方式设置所有标头>context.Response.Headers
,然后使用System.IO.FileStream
加载 .mp3 文件并将其发送到context.Response.OutputStream< /代码>。 在 MSDN 上查找
System.Web.HTTPHandler
、System.IO.FileStream
和System.Web.HTTPResponse
了解更多信息。You're not really protecting the MP3s, just obfuscating them. Anyone can still save them, especially if they just fire up an HTTP debugger like Fiddler to figure out what HTTP calls are being made. The fact that you've set them to not cache and to go through a PHP script doesn't help much.
To get this same effect using ASP.NET, you'd write an
HTTPHandler
(probably just off an .ashx), set up all the headers the same way usingcontext.Response.Headers
, then load the .mp3 file usingSystem.IO.FileStream
and send that tocontext.Response.OutputStream
. Look upSystem.Web.HTTPHandler
,System.IO.FileStream
, andSystem.Web.HTTPResponse
on MSDN for more info.