1

手头的工作:

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

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

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

环境:

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

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

4

6 回答 6

5

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

于 2008-09-10T17:08:36.447 回答
2

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.

于 2008-09-10T17:39:59.773 回答
1

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

您还可以禁止访问没有引荐来源网址或错误引荐来源网址的请求。但这比饼干还要假。

那得看你有多在乎了。

于 2008-09-10T17:05:27.673 回答
1

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

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

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

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

于 2008-09-12T14:02:21.293 回答
0

我正要建议使用 .htaccess 推荐技巧,但这不是一种非常安全的方法。制作一个 PHP 脚本很容易,并添加了一个自定义的 http-referral。如果你在那里进入下载页面,它会认为你来自那个页面。

这是一个相关的问题吗?你能谈谈你的下载页面的上下文吗?

于 2008-09-11T21:25:06.510 回答
0

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

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

于 2009-11-17T13:55:33.830 回答