手头的工作:

我想确保我的网站的用户在开始下载之前查看页面。如果他们没有查看该页面,但尝试直接热链接到文件,则他们应该在允许下载之前访问该网页。

有什么建议比我的想法更好,即发送 cookie 并在下载开始之前检查 cookie 是否存在(通过 .htaccess)?

网页和下载文件将位于不同的服务器上。

环境:

  • 所有机器上的 Apache 2
  • 所有机器上的 PHP 5
  • MySQL 5 可在“网页”服务器上使用(无法从下载服务器访问)

内森问我要解决的问题是什么,事实上我想防止来自论坛的热链接。如果人们使用我们的带宽从我们的服务器下载,我想在下载开始之前向他们展示一个带有广告的页面。它不需要完全安全,但我们需要赚一些钱来资助服务器,对吧?:)

有帮助吗?

解决方案 6

我要使用 mod_auth_token 确保用户拥有“最近的链接”。

使用 mod_auth_token 您可以创建过期链接,即如果有人决定采用现有链接并将其发布到另一个网站上,则该链接将在指定时间后过期。这将导致 403 FORBIDDEN,我可以捕获该错误并将用户重定向到我希望他访问的 HTML 页面。

其他提示

不要允许热链接到文件,而是将它们存储在可访问的网络路径之外。相反,将下载请求发送到启动下载的 php 脚本。您可以进行检查以确保请求的页面是您想要阅读的页面。

Apache mod_rewrite RewriteRule 可以做到这一点。

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://www.example.com/page.html$
RewriteRule file.exe http://www.example.com/page.html [R=301,L]

基本上,如果请求 file.exe 没有附带 page.html 作为引荐来源网址,它将 301 将用户重定向到 page.html.

你可以使用 分布式服务器端 会话而不是 cookie,但这可能比它的价值更麻烦。

你也可以 禁止访问 没有推荐人或有错误推荐人的请求。但这比饼干更容易伪造。

这取决于你有多关心。

这里的解决方案取决于您要解决的问题。如果您只是想确保直接链接不会发布在论坛等中,那么只需使用 .htaccess 检查引荐来源网址就足够了。当然,推荐人很容易被伪造,因此,如果有人这样做的风险是一个问题,那么您就需要做其他事情。

如果您需要更安全的东西,cookie 应该可以解决问题。我们不能只使用 php 会话,因为文件服务器和网络服务器位于不同的机器上。但我们可以根据时间的哈希值和一些秘密值创建一个 cookie。

cookievalue = sha1('secretvalue'.date('z-H'));

当用户请求实际文件时,文件服务器会再次生成此 cookie 并确保它与用户匹配。这意味着,即使用户伪造了 cookie,一小时后它也会失效,所以谁在乎呢,他们无法生成自己的新 cookie,因为他们不知道秘密值。

我本来打算建议 .htaccess 引用技巧,但这不是一个非常安全的方法。制作 PHP 脚本很容易,添加了自定义的 http-referral。如果您进入那里的下载页面,它会认为您来自该页面。

这是一个相关问题吗?您能介绍一下您的下载页面的上下文吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top