做一个网站,上传图片到服务器某个位置,然后通过链接可以直接访问这个图片,就是说别人拿到这个链接就可以直接在浏览器输入绝对路径看到。怎么样可以防止呢?
某草草2017-05-16 13:10:02
改造图片服务器,图片文件夹不直接对外暴露。 在图片服务器上架设一个Http代理服务,访问图片的url中必须有一个合法的token参数才允许访问,例如 http://www.imgserver.com/test.jpg?t=xT5112XabseFg0
,
其中t参数时你自己设定的加密算法生成的,里面含有这个参数的创建时间。
服务器接收到这个请求后,解密token,拿到里面的时间戳,如果是10秒之内创建的(你可以设置你自己希望的有效期),就返回图片信息,否则拒绝访问。
这样一个图片链接就有了有效期概念,自己使用时加载带有合法t参数的图片就能正常展示给用户。用户此时自己拷贝这个图片地址在浏览器直接访问,很可能已经过了有效期,自然打不开了。
此外,还有个更简单的方法防盗链:(当然也可以和上面的方法结合用)
判断http请求发过来的referer信息,如果不等于你自己的网站域名或者为空(即,该图片请求不是在你的网站发起的),那么不允许访问。
我想大声告诉你2017-05-16 13:10:02
了解thinkphp5
吧,他为什么要把入口文件放到public目录下呢?
因为这样可以保证你项目中的资源,比如图片,不能直接被浏览器访问到,只能通过单一的入口文件 index.php 访问,这样你的图片或者某些代码文件就不能被直接访问到了!
你可以参照这个思路,设置访问权限,只能通过入口文件访问到图片资源
为情所困2017-05-16 13:10:02
图片上传就是给人看的。估计你是想防盗连吧。开启防盗连,通常判断referer就能实一, 并选择禁止空的referer就可以了。当然,要完全防人家盗。可以用不公开真实地址,或者加上token等办法。
phpcn_u15822017-05-16 13:10:02
如果你用的http服务器是apache,那么在图片目录下新建 .htaccess 写入以下代码:
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !abc.com [NC]
RewriteRule .*\.(jpg|png)$ http://localhost/ [R,NC,L]
</ifmodule>
原理是利用 apache 的 rewrite 功能,判断 referer 是否是来自 abc.com,如果不是则跳转到 localhost。
如果图片是直接访问是没有 referer 的,如果是从其他网站引用则 referer 是其他网站的域名,都不允许访问,可以达到保护图片和节省流量的效果。