阿帕奇下载:确保下载前已查看该页面
-
09-06-2019 - |
题
手头的工作:
我想确保我的网站的用户在开始下载之前查看页面。如果他们没有查看该页面,但尝试直接热链接到文件,则他们应该在允许下载之前访问该网页。
有什么建议比我的想法更好,即发送 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
.
这里的解决方案取决于您要解决的问题。如果您只是想确保直接链接不会发布在论坛等中,那么只需使用 .htaccess 检查引荐来源网址就足够了。当然,推荐人很容易被伪造,因此,如果有人这样做的风险是一个问题,那么您就需要做其他事情。
如果您需要更安全的东西,cookie 应该可以解决问题。我们不能只使用 php 会话,因为文件服务器和网络服务器位于不同的机器上。但我们可以根据时间的哈希值和一些秘密值创建一个 cookie。
cookievalue = sha1('secretvalue'.date('z-H'));
当用户请求实际文件时,文件服务器会再次生成此 cookie 并确保它与用户匹配。这意味着,即使用户伪造了 cookie,一小时后它也会失效,所以谁在乎呢,他们无法生成自己的新 cookie,因为他们不知道秘密值。
我本来打算建议 .htaccess 引用技巧,但这不是一个非常安全的方法。制作 PHP 脚本很容易,添加了自定义的 http-referral。如果您进入那里的下载页面,它会认为您来自该页面。
这是一个相关问题吗?您能介绍一下您的下载页面的上下文吗?