我希望我的PHP网站上有我的文件
http://mysite.com/files/file.exe?auth=qwe1245efmkrkn% $!e12< - 一些生成的哈希......
我没有编写任何代码,但我想知道如何实现auth变量以直接链接到文件..任何想法?谢谢!
答案 0 :(得分:2)
您可以使用.htaccess
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
复制并粘贴此代码,使用.htaccess
重命名并保存在根目录中。
正如Gumbo所提到的,除非您在自己的网站上应用CSRF保护,否则一些浏览器不会发送任何请求标头并伪造请求是非常容易的。 所以更新的.htaccess允许这个
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain\.com/ [NC]
#Redirect to an image
RewriteCond %{REQUEST_URI} !hotlink\.(gif|png) [NC]
RewriteRule .*\.(gif|jpg|png)$ http://yourdomain.com/images/hotlink.png [NC]
并添加
Header set X-Frame-Options DENY
确保网站即使来自同一网站也可以被框起来。可能对CSRF有点帮助。
替代方案,可能是将图像请求重定向到页面来处理它。
答案 1 :(得分:2)
你需要使用过期来散列路径,作为链接的一部分传递,
HASH =路径+秘密+到期
链接看起来像?hash = [结果哈希]& expiration = 192009345< - 时间链接从unix epoc开始以毫秒为单位。
然后在提供文件时,您将使用您从入站链接获得的秘密+路径+操作进行哈希处理,如果哈希匹配且未到期,则提供文件,如果没有抛出403
您可以通过htaccess重写资产以使用散列脚本并将实际资产保存在非公共文件夹中,然后使用内容类型的标头通过php脚本为其提供服务,并在文件读取操作中将二进制文件转储出来。 / p>
注意:永远不要将您的秘密放在仅在您的服务器端代码
的链接中如下所示:
RewriteEngine on
RewriteRule \(.*)(\.jpg|\.gif|\.png)$ hashChecker.php?file=$1$2 [QSA]