php - 如何防止网站图片被浏览
黄舟
黄舟 2017-05-16 13:08:02
0
11
1267

做一个网站,上传图片到服务器某个位置,然后通过链接可以直接访问这个图片,就是说别人拿到这个链接就可以直接在浏览器输入绝对路径看到。怎么样可以防止呢?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(11)
伊谢尔伦

楼主可以试用下又拍云的云存储,有Token防盗链解决你说的问题。提供篇文章方便你了解Token防盗链。

文章推荐:Token 防盗链详解

某草草

改造图片服务器,图片文件夹不直接对外暴露。 在图片服务器上架设一个Http代理服务,访问图片的url中必须有一个合法的token参数才允许访问,例如 http://www.imgserver.com/test.jpg?t=xT5112XabseFg0,

  • 其中t参数时你自己设定的加密算法生成的,里面含有这个参数的创建时间。

  • 服务器接收到这个请求后,解密token,拿到里面的时间戳,如果是10秒之内创建的(你可以设置你自己希望的有效期),就返回图片信息,否则拒绝访问。

这样一个图片链接就有了有效期概念,自己使用时加载带有合法t参数的图片就能正常展示给用户。用户此时自己拷贝这个图片地址在浏览器直接访问,很可能已经过了有效期,自然打不开了。

此外,还有个更简单的方法防盗链:(当然也可以和上面的方法结合用)

判断http请求发过来的referer信息,如果不等于你自己的网站域名或者为空(即,该图片请求不是在你的网站发起的),那么不允许访问。

習慣沉默

1.最蠢的方法就是对图片文件名进行加密,当系也防止不了link被盗用
2.使用base64方式加载图片
3.在中间器设置方式服务器以外访问

阿神

搜一下图片防盗链吧,这方面要说的太多了。

黄舟

这种需求还是用图片防盗链技术解决比较好。

曾经蜡笔没有小新

可以试试云平台的对象存储功能,阿里云和七牛都有,上传和下载的权限是分开的,或者也有相对传统的防盗链这样的功能可以用。

我想大声告诉你

了解thinkphp5吧,他为什么要把入口文件放到public目录下呢?

因为这样可以保证你项目中的资源,比如图片,不能直接被浏览器访问到,只能通过单一的入口文件 index.php 访问,这样你的图片或者某些代码文件就不能被直接访问到了!

你可以参照这个思路,设置访问权限,只能通过入口文件访问到图片资源

为情所困

图片上传就是给人看的。估计你是想防盗连吧。开启防盗连,通常判断referer就能实一, 并选择禁止空的referer就可以了。当然,要完全防人家盗。可以用不公开真实地址,或者加上token等办法。

phpcn_u1582

如果你用的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 是其他网站的域名,都不允许访问,可以达到保护图片和节省流量的效果。

我想大声告诉你

我只想说,要不放到服务器去!只要放上去,就能看!什么鬼防盗链,防菜鸟还行!

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板