盗链、反盗链、反反盗链、反反反盗链

atppp写Google Reader 里看新浪博客图片提到Firefox的RefControl插件
就想到了盗链、反盗链、反反盗链、反反反盗链这个题目

先简单解释一下意思:
盗链:我的图片音乐视频等资源被别人的网页用了 算盗链
反盗链:基于带宽成本考虑等原因 不想让别人用我的图片 只允许我自己用 想法限制
反反盗链:利用我限制方法的漏洞 想法用我不想让用的图片
反反反盗链:完善限制方法 别人想法用也不让用
......

简单说就是反盗链一件事
很有意思很具普遍性的一个课题 以前折腾过不少 写写思路

1. 如何盗链:
基本的html知识 如img嵌套一个图片 href链接一个文件下载等

2. 如何反盗链
简单的常用的方法是判断Referer头是不是自己的域名
apache可以通过匹配Referer进行 env 设置 然后Allow Deny
squid 可以通过匹配Referer进行 acl 设置 然后http_access alow deny
有一个细节就是不带Referer的请求(空Referer)允不允许 一般都允许 严格的话可以限制
(apache判断 ^$ squid可以通过对有内容取反设置 .+)

3. 如何反反盗链
反反盗链就是绕过前面反盗链的设置
下载软件的思路:一般是加上Referer等
浏览器的思路:一般是改设置不发Referer 或发反盗链不限制的Referer
Firefox的基本设置是 network.http.sendRefererHeader (about:config) 默认是2全发送
改成0 不发送Referer 改成1点链接发送 嵌套图片等不发送Referer头
Firefox 的 RefControl 插件可以基于站点设定Referer策略 或者指定Referer
对付判断Referer为自身或为空等都能反反盗链成功

另外也可以使用代理 代理一层根据需求过滤 Referer

4. 如何反反反盗链
简单的不行了 只能出大招了
比如加上User-Agent等别的头判断(当然也能绕) 正确的是 加上Cookie判断等 记录比对来过的IP
比如根据应用的架构 访问页面时设置session 访问图片等时判断是否来过
或者访问页面时把ip写到内存库 ip库可以放本地内存或远程(提供tcp/udp接口 注意效率)
访问图片时判断来源ip是否在这个ip库再返回正常数据或者404 object not found
技术上还可以更完美更变态一些...


当然并不是都限制"盗链" 比如有些网站资源丰富 或者给图片打上小标签打自己知名度等
限制的话能能节省带宽成本 防止被滥用等
限不限都有道理 反正大家都不容易 可以理解
这些是产品或管理方面的考量了 技术上大体就是上面说的

文章来自: windtear
引用通告: 查看所有引用 | 我要引用此文章
Tags:
评论: 0 | 引用: 0 | 查看次数: 7785
发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码: 9+4=?
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册账号.
字数限制 500 字 | UBB代码 关闭 | [img]标签 关闭