今天做个项目学到了一点,防盗链机制如果允许无 Referer 访问的话,是很容易绕过的。
先说说防盗链的原理,http 协议中,如果从一个网页跳到另一个网页,http 头字段里面会带个 Referer。图片服务器通过检测 Referer 是否来自规定域名,来进行防盗链。
如果盗用网站是 https 的 protocol,而图片链接是 http 的话,则从 https 向 http 发起的请求会因为安全性的规定,而不带 referer,从而实现防盗链的绕过。
比如现在在 cnode 这里,由于我们启用了 https,所以任何 http 的图片几乎都可以直接贴过来并显示了。
20150519 update 现在我已经把出去的 https 也加上了 referer
试试微博的相册 =,=
soga
@Ralph-Wang 微博不防盗链的
论坛的 https速度感觉慢啊
不对呀,图片服务器检查到Referer不是规定的值,那么图片服务器会返回错误或给出提示,如果现在从Https加载做了防盗的http图片,由于没有Referer,图片是加载不了的吧。
@jinphen 如果没有 referer,服务器会认为是浏览器直接打开了文件,所以是可以显示的。
@alsotang 呃 =,=
贴个 QQ 空间的图过来试试:
网易空间的:
奈斯,学习了
默默点了举报…
我是来看图的。
这只是一些公司对协议机制上不完善,谈不上破解
百度的一直是参数错误!
测试百度图片
测试360图片
测试搜搜图片
@alsotang 这福利不错
测试下先。
防盗链机制如果允许无 Referer 访问的话
最关键是这句话
@coordcn bingo!
请用curl命令。。防盗链无解。
我在网站头加了
<meta name="referrer" content="always">
所以出去的链接都会带 referrer 了,无论 https 或者 http
想请教下,能不能控制出去的referrer的值…
@flybears 不能,这个地方浏览器卡得很紧
@alsotang 浏览器卡的紧 但程序代理你怕不怕 所有引用的外部图片 xxx.com/xxx.png 全部给你弄成 cnodejs.org/daolian?imgurl=xxx.com/xxx.png 程序里面用curl获取 再输出 外面在弄个varnish给你一缓存
@gloomyzerg 这已经是防爬虫的场景了吧?
@alsotang 我是来看图的。。。。。。。。
@alsotang 图片不错儿
mark
在http网站测试了下, 也能够正常现实. qq和网易,应该也没有防止图片被盗链.
防盗链没机制没接触过学习中
@nqdy666 你这是忘了清缓存
@alsotang 恕我愚昧, 忘了清缓存这个和图片反盗链啥关系哇?
@nqdy666 人家即使防止了盗链,但如果你的浏览器有缓存的话,看到相同的 url 也就直接使用缓存的了。 所以在你看来,【qq和网易,应该也没有防止图片被盗链】
我也测
我上面发的这个图片不行?直接打开就可以,怎么破?
@liangweidong 我直接打开也错误啊
@alsotang 刷新一下会不会出来
@liangweidong 或者加上http