PHP图片防盗链工具:Hotlink Protection
程序员文章站
2023-12-27 16:25:33
...
Hotlink Protection的原理是利用Apache的RewriteCond功能,在得到文件请求时检测请求REFERER,只有是本网站的URL才放行。这个原理很适合自制头像的保护,因为头像只应该在本网站内部使用。
RewriteCond %{HTTP_REFERER} !^http://bkjia.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://bkjia.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.bkjia.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.bkjia.com$ [NC]
RewriteRule .*\.(jpg|jpeg|gif|png)$ http://www.bkjia.com/img/hp.gif [R,NC]
下面以discuz为例,说一下使用方法:烈……火……网……防……盗……链
Discuz的内置头像保存在/forum/images/avatars/目录下,我只想保护这些内置头像,用户上传的头像和其他图片不去限制别人引用,因此RewriteCond代码放置在此目录即可:
Copy to Clipboard引用的内容:[www.bkjia.com] RewriteEngine onRewriteCond %{HTTP_REFERER} !^http://bkjia.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://bkjia.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.bkjia.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.bkjia.com$ [NC]
RewriteRule .*\.(jpg|jpeg|gif|png)$ http://www.bkjia.com/img/hp.gif [R,NC]
四个RewriteCond排除四种访问自己网站的方法,分别是不带www访问网站下某页面、不带www访问网站首页、带www访问网站下某页面和带www访问网站首页。符合这四种情况外的HTTP_REFERER,并且文件以jpg或jpeg、gif、png结尾则转到http://www.bkjia.com/img/hp.gif文件处。
把这个文件保存为.htaccess,上传到/forum/images/avatars/目录下即可。如想保护整个网站的图片则上传到根目录;如想保护其他格式的文件则直接在RewriteRule中添加扩展名。
顺便说一句:这种方法有一定的局限性,比如某些下载工具可以发送自定的“引用”值;此外有些用户安装的防火墙、杀毒软件会阻止浏览器发送HTTP_REFERER值给服务器,因此他们正常浏览会受影响。真不知道这类防火墙软件厂商是怎么想的,因为这最多只涉及隐私(而且主要是HTTP_REFERER网站的隐私,跟访问者没什么关系),而网络安全无关。