【问题标题】:How can I prevent users from downloading MP3s directly如何防止用户直接下载 MP3
【发布时间】:2011-09-29 10:26:43
【问题描述】:

我正在构建一个类似网络广播的服务,其中用户对服务进行身份验证,获取一个 cookie,然后一个基于 Flash 的应用程序从服务器播放 mp3。仅当客户端被允许使用该特定 mp3 时,服务器才会交付。

如果用户打开 HTTP 记录器(如 FireBug),他可以看到通过 flash 下载的文件。如果他直接通过地址栏打开 mp3 的 URL,他可以很容易地下载 MP3,虽然 URL 是用户无法猜到的。

我正在寻找一个安全的系统来防止用户将 MP3 直接下载到他的系统中。我检查了 last.fm,因为他们使用了类似的设置,并且以某种方式阻止了它。

【问题讨论】:

    标签: php http drm


    【解决方案1】:

    最终,你无法阻止一个有决心的人。但是,您至少可以让它变得困难。

    有几个选项涉及推荐人检查、身份验证和类似的有趣的东西。但可能我见过的最成功的反下载检查是这样工作的:

    用户表示他想要流式传输文件;该应用程序发出一个经过身份验证的加密请求,指示他想要的操作。结果是一个只能使用一次且有时间限制的 URL,它可以被托管文件的任何应用程序或 CDN 识别。在 URL 被使用一次(即被 flash 应用程序)之后,它就会过期并且永远不能再次使用。如果在给定时间(几秒)内没有开始流式传输,则 URL 也会过期。显然,给出的 URL 并不直接对应文件名,而是在服务器端进行身份验证、解码和翻译。

    解决方法仍然不是不可能,但相当困难。

    【讨论】:

    • 这可能是一个好方法,但我不确定在第一个请求启动后如何让 URL 过期。有什么想法吗?
    • @nanoman,URL 应该类似于getstream.php?id=123,其中id 标识来自DB 的数据,getstream.php 验证id,如果正确,则将文件数据传递给客户端和从数据库中删除相应的条目。
    【解决方案2】:

    您可以使用 RTMP 而不是 HTTP 来传送音频数据。 RTMP 旨在用于流式传输音频、视频和其他数据。它只流式传输数据,而不是文件。这不是 100% 安全的,因为如果客户端(浏览器、flash 播放器等)有东西,用户可以保存它,但它仍然比通过 HTTP 提供文件要好。

    您将需要支持 RTMP 的服务器,例如 Flash Media Server (FMS)、Wowza 或 Red5。

    【讨论】:

    • RTMP 相比简单的 HTTP 渐进式下载有太多的缺点。当前的设置可以在一台根服务器上处理近 200 个站点,因为它不必提供稳定的流。
    • @nanoman,你问了可能的解决方案——我给了其中一个。如果 last.fm 也使用它,我不会感到惊讶,但是,因为我没有在那里注册,所以我无法检查。
    • 使用 HTTP 代替流媒体是一个非常有意识的决定 - 产品已经启动并运行。 last.fm 使用完全相同的技术(pandora 也是)——我认为您无需注册即可收听。他们似乎有一个智能系统来防止直接下载。
    • @nanoman,为什么投反对票?只是因为您出于某种原因不喜欢 RTMP,尽管它实际上阻止直接下载(这是您的问题中描述的问题)?至于last.fm,当我点击“Radio”时,他们会将我重定向到注册页面——这就是我认为需要注册的原因。如果他们使用 HTTP,如您所说,那么 tylerl 的解决方案对我来说似乎很好。我还评论了如何实现“过期网址”效果的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多