手头的工作:
我想确保我的网站用户在开始下载之前查看页面。如果他们没有查看页面但是尝试直接热链接到文件,他们应该在允许下载之前访问网页。
任何比我发送cookie更好的建议 - 在下载开始之前 - 检查cookie是否存在(通过.htaccess)?
网页和下载文件将位于不同的服务器上。
环境:
答案 0 :(得分:5)
不要允许热链接到文件,而是将它们存储在Web可访问路径之外。而是将下载请求转到启动下载的php脚本。您可以放置支票以确保请求页面是您想要阅读的页面。
答案 1 :(得分: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
作为引荐来源,则会将用户重定向到page.html
。
答案 2 :(得分:1)
你可以使用distributed server side个会话而不是cookie,但这可能比它的价值更麻烦。
您还可以forbid access申请没有推荐人或错误的推荐人。但这比饼干更加可行。
这取决于你关心多少。
答案 3 :(得分:1)
此处的解决方案取决于您尝试解决的问题。如果您只是想确保直接链接不会在论坛和诸如此类的内容中发布,那么只需使用.htaccess检查引荐来源即可。当然推荐人可以很容易伪造,所以如果有人这样做的风险是一个问题,那么你需要做其他事情。
如果您需要更安全的东西,Cookie应该可以解决问题。我们不能只使用php会话,因为文件服务器和网络服务器在不同的盒子上。但我们可以根据时间的哈希值和一些秘密值创建一个cookie。
cookievalue = sha1('secretvalue'.date('z-H'));
当用户请求实际文件时,文件服务器会再次生成此cookie并确保它与用户匹配。这意味着,即使用户伪造了cookie,它也会在一小时后失效,所以谁在乎,并且他们无法生成自己的新的,因为他们不知道秘密值。
答案 4 :(得分:0)
我准备建议.htaccess推荐技巧,但它不是一种非常安全的方法。通过添加自定义http-referral,可以轻松制作PHP脚本。如果您在那里进入下载页面,它会认为您来自该页面。
这是一个相关的问题吗?你能说一下下载页面的背景吗?
答案 5 :(得分:0)
我将使用mod_auth_token来确保用户拥有“最近的链接”。
使用mod_auth_token,您可以创建过期链接,即如果有人决定接收现有链接并将其发布到其他网站,则此链接将在指定时间后过期。这将导致403 FORBIDDEN我可以捕获并将用户重定向到我想要他的HTML页面。