做一个网站,上传图片到服务器某个位置,然后通过链接可以直接访问这个图片,就是说别人拿到这个链接就可以直接在浏览器输入绝对路径看到。怎么样可以防止呢?
人生最曼妙的风景,竟是内心的淡定与从容!
楼主可以试用下又拍云的云存储,有Token防盗链解决你说的问题。提供篇文章方便你了解Token防盗链。
文章推荐:Token 防盗链详解
改造图片服务器,图片文件夹不直接对外暴露。 在图片服务器上架设一个Http代理服务,访问图片的url中必须有一个合法的token参数才允许访问,例如 http://www.imgserver.com/test.jpg?t=xT5112XabseFg0,
http://www.imgserver.com/test.jpg?t=xT5112XabseFg0
其中t参数时你自己设定的加密算法生成的,里面含有这个参数的创建时间。
服务器接收到这个请求后,解密token,拿到里面的时间戳,如果是10秒之内创建的(你可以设置你自己希望的有效期),就返回图片信息,否则拒绝访问。
这样一个图片链接就有了有效期概念,自己使用时加载带有合法t参数的图片就能正常展示给用户。用户此时自己拷贝这个图片地址在浏览器直接访问,很可能已经过了有效期,自然打不开了。
此外,还有个更简单的方法防盗链:(当然也可以和上面的方法结合用)
判断http请求发过来的referer信息,如果不等于你自己的网站域名或者为空(即,该图片请求不是在你的网站发起的),那么不允许访问。
1.最蠢的方法就是对图片文件名进行加密,当系也防止不了link被盗用2.使用base64方式加载图片3.在中间器设置方式服务器以外访问
搜一下图片防盗链吧,这方面要说的太多了。
这种需求还是用图片防盗链技术解决比较好。
可以试试云平台的对象存储功能,阿里云和七牛都有,上传和下载的权限是分开的,或者也有相对传统的防盗链这样的功能可以用。
了解thinkphp5吧,他为什么要把入口文件放到public目录下呢?
thinkphp5
因为这样可以保证你项目中的资源,比如图片,不能直接被浏览器访问到,只能通过单一的入口文件 index.php 访问,这样你的图片或者某些代码文件就不能被直接访问到了!
你可以参照这个思路,设置访问权限,只能通过入口文件访问到图片资源
图片上传就是给人看的。估计你是想防盗连吧。开启防盗连,通常判断referer就能实一, 并选择禁止空的referer就可以了。当然,要完全防人家盗。可以用不公开真实地址,或者加上token等办法。
如果你用的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 是其他网站的域名,都不允许访问,可以达到保护图片和节省流量的效果。
我只想说,要不放到服务器去!只要放上去,就能看!什么鬼防盗链,防菜鸟还行!
楼主可以试用下又拍云的云存储,有Token防盗链解决你说的问题。提供篇文章方便你了解Token防盗链。
文章推荐:Token 防盗链详解
改造图片服务器,图片文件夹不直接对外暴露。 在图片服务器上架设一个Http代理服务,访问图片的url中必须有一个合法的token参数才允许访问,例如
http://www.imgserver.com/test.jpg?t=xT5112XabseFg0
,其中t参数时你自己设定的加密算法生成的,里面含有这个参数的创建时间。
服务器接收到这个请求后,解密token,拿到里面的时间戳,如果是10秒之内创建的(你可以设置你自己希望的有效期),就返回图片信息,否则拒绝访问。
这样一个图片链接就有了有效期概念,自己使用时加载带有合法t参数的图片就能正常展示给用户。用户此时自己拷贝这个图片地址在浏览器直接访问,很可能已经过了有效期,自然打不开了。
此外,还有个更简单的方法防盗链:(当然也可以和上面的方法结合用)
1.最蠢的方法就是对图片文件名进行加密,当系也防止不了link被盗用
2.使用base64方式加载图片
3.在中间器设置方式服务器以外访问
搜一下图片防盗链吧,这方面要说的太多了。
这种需求还是用图片防盗链技术解决比较好。
可以试试云平台的对象存储功能,阿里云和七牛都有,上传和下载的权限是分开的,或者也有相对传统的防盗链这样的功能可以用。
了解
thinkphp5
吧,他为什么要把入口文件放到public目录下呢?因为这样可以保证你项目中的资源,比如图片,不能直接被浏览器访问到,只能通过单一的入口文件 index.php 访问,这样你的图片或者某些代码文件就不能被直接访问到了!
你可以参照这个思路,设置访问权限,只能通过入口文件访问到图片资源
图片上传就是给人看的。估计你是想防盗连吧。开启防盗连,通常判断referer就能实一, 并选择禁止空的referer就可以了。当然,要完全防人家盗。可以用不公开真实地址,或者加上token等办法。
如果你用的http服务器是apache,那么在图片目录下新建 .htaccess 写入以下代码:
原理是利用 apache 的 rewrite 功能,判断 referer 是否是来自 abc.com,如果不是则跳转到 localhost。
如果图片是直接访问是没有 referer 的,如果是从其他网站引用则 referer 是其他网站的域名,都不允许访问,可以达到保护图片和节省流量的效果。
我只想说,要不放到服务器去!只要放上去,就能看!什么鬼防盗链,防菜鸟还行!