盗链,可耻啊
最近发现一直在维护的行业网站,突然在百度的排名下降了很多,甚至前几页都找不到,而且流量也没以前多了,服务器经常假死,网站出现打不开的情况,经过排查,才发现,原来网站被别人用框架盗链了,汗!
所谓的盗链就是服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益。
通俗的说就是把别人的网站上资源直接链接到自己的网站上使用,这些资源还是在别人的服务器里,并没有放到自己的服务器里,只是做个链接链到自己的网站上,举个例子,如果是自己网站使用自己服务器里的资源,比如是图片,那么代码应该这样写:<img src="images/pic.jpg" />,然而如果是盗链,比如盗链http://www.abc.com/里的图片,代码就会这样写<img src="http://www.abc.com/image/pic.jpg" />,所以可以看出,被盗网站的数据量访问大了,可是网站访问量少了,占用了被盗网站的宽带量,导致网站瘫痪,不能正常访问常见的盗链有图片盗链、音频盗链、视频盗链、文件盗链。 还有一种就是整站被盗链,使用iframe框架将网站域名链接上去,别人打开的时候就直接打开盗链的网站
既然找到了原因,也就相应的找到了解决了办法,既然是被盗链,那来源一定不是正确,所以主要判断域名和服务器即可
下面就来简单看看如何防止网站的背部资源被盗链,就是图片了,视频了等,可以在httphandler中作相应的判断
using System;
public class Handler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//判断是否是本地引用,如果是则返回给客户端正确的图片
//这里的判断就是用到了http请求中所记录的页信息
//如果是网站,可将“localhost”修改为网站地址
if (context.Request.UrlReferrer.Host == "localhost")
{
//设置客户端缓冲中文件过期时间为0,即立即过期。
context.Response.Expires = 0;
//清空服务器端为此会话开辟的输出缓存
context.Response.Clear();
//获得文件类型
context.Response.ContentType = "image/jpg";
//将请求文件写入到输出缓存中
context.Response.WriteFile
(context.Request.PhysicalPath);
//将输出缓存中的信息传送到客户端
context.Response.End();
}
//如果不是本地引用,则属于盗链引用,返回给客户端错误的图片
else
{
//设置客户端缓冲中文件过期时间为0,即立即过期。
context.Response.Expires = 0;
//清空服务器端为此会话开辟的输出缓存
context.Response.Clear();
//获得文件类型
context.Response.ContentType = "image/jpg";
//将特殊的报告错误的图片文件写入到输出缓存中
context.Response.WriteFile
(context.Request.PhysicalApplicationPath + "error.jpg");
//将输出缓存中的信息传送到客户端
context.Response.End();
}
}
public bool IsReusable
{
get
{
return true;
}
}
web.config
<add verb="*" path="*.jpg" type="Handler"/>
有一点要说一下,图片加水印,虽然也是防止图片被别的网站盗用,但是两者有本质的区别...
不同的盗链可以采用不同的方法解决