代码改变世界

解决图片被盗链接的问题?

2010-04-01 08:18  Martin Qin  阅读(2714)  评论(19编辑  收藏  举报

 

申述一下..昨天发过此文..但是样式大乱..就删了..今天补上

.其实对于这个问题应该说是上有政策下有对策.大家可以交流一下.看看有什么好的方案..以下是我自己写的一点点..share一下..还望指点。图片资源是站点中最为费神的东西,如果很多垃圾站点去引用您的图片地址,占用你的服务器资源怎么办? 下面就以图片服务器为例写个简单的示例..

1.所有的image url都跟上密文.比如你在绑定页面image url时可以这么做.以下是MVC示例.其他的差不多.
ImageController

2.自定义Handler.专用于处理图片请求.此handler做这么几件事,

1.获得图片请求的key,即上段代码中的encryptedEncoding.没有图片key,那就哪里来送回哪里去.(友好点.给个性感图片送过去..)

2.应该所有key都经过对称算法加密,so..解密先..

3.判断请求是否来自本站.是本站流程进4. 否则进5

4.本站请求再做进一步筛选.查看ShareData中是否有包含此key.(ShareData是自定义的.),存在图片的key那么清除ShareData中此key然后正确返回请求图片.不存在那么同步骤1一样送回去..(做ShareData判断是防止javascript 篡改request head信息)

5.不是来自本站的请求.可以提供自己的策略..我这里做的是30天链接过期.(因为第一段代码中用时间刻度做加密..所以这里解密了很好判断)

ImageHandler

因为是自定义Handler注意在config中注册handler节点..至于配置节不知道什么意思..自己查查.
web.config

<httpHandlers> <add verb="*" path="*.gif" type=

"MvcApp.Handler.ImageHandler"/>

<add verb="GET" path="*.jpg" type="MvcApp.Handler.ImageHandler"/>

</httpHandlers>

以上的解决方案只代表个人,并不代表官方..哈哈..当然对ShareData并没有做并发等处理..只是简单的实现..还望提供更多的思路.当然可以通过配置iis 禁止外站请求图片.不过这种限制太过强硬了..腾讯qzone里的图片好像就不能在外站引用
源码奉上.随附测试玉照一份
https://files.cnblogs.com/martinR/MvcApp.rar