区分闪存请求和请求来自浏览器的地址栏,

时间:2010-12-06 11:15:59

标签: php javascript flash

嗨我想阻止下载mp3歌曲,所以我想问你们,是否有可能区分Flash请求和普通的http请求,我已经检查了$ _SERVER变量但是找不到任何区别,应该怎么做我做? 任何解决方案,请

2 个答案:

答案 0 :(得分:1)

不,当您使用Flash的getURL或navigateToUrl方法时,它会发送一个普通的http数据包,您无法将其与正常的浏览器请求区分开来。

但SWF文件本身可以是域锁定的,即使这种技术是可以攻击的,如果他们可以下载您的SWF文件但它被广泛使用,同时,网站管理员尝试通过控制Apache和.htaccess指令来阻止下载。

编辑:是的,您可以直接从SWF文件发送标题。

var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest(whatever_url);
request.requestHeaders.push(new URLRequestHeader("pragma", "no-cache"));
request.requestHeaders.push(new URLRequestHeader("Expires", "Thu, 01 Jan 1970 00:00:00 GMT, -1"));
request.requestHeaders.push(new URLRequestHeader("Cache-Control", "no-cache, no-store, must-revalidate"));
loader.load(request);

例如,此代码声称可以防止在用户的浏览器缓存目录中缓存SWF文件。

答案 1 :(得分:1)

我将描述一种实现你想要的方法,这不是简单但不太复杂。也不确定它是最好的,但它应该工作。

第一步:而不是直接链接到mp3文件(例如/MySongs/song.mp3)将文件放在网站根文件夹之外,并在网址上有获取所需文件的页面并以正确的内容类型和所有内容发送文件的内容,例如GetSong.php?songname=song3

完成此操作后,您可以更好地控制文件。

第二步:在flash参数中,将/MySongs/song.mp3更改为上面的内容。确保它正在工作..注意这仍然没有解决任何问题。

第三步:每当用户向包含获取歌曲的Flash的页面发出请求时,请使用请求的确切时间戳分配Session变量(或其在PHP中的等效项)。在这里,我依赖闪存将在同一时刻发送请求的事实。

最后一步:在GetSong.php中检查上述Session变量,并仅在当前时间与Session中的时间戳完全匹配时发送文件,可能允许一毫秒的余量。

聪明的用户会破解它的工作方式可能会绕过它,但它应该让大多数普通人试图获取这首歌,即使他们正在使用工具来查看Flash是如何请求这首歌的。