什么是图片盗链
盗链
就是一个网站中如果没有页面中所说的信息,例如图片信息,那么它完全可以将这个图片连接到别的网站。这样没有任何资源的网站利用了别的网站的资源来展示给浏览者,提高自己的访问量,而大部分浏览者又不会很容易地发现,显然,这对于那个被利用资源的网站是不公平的
解决方案
现在利用ASP.NET中的HttpHandler能够很好地解决这个问题,之所以能够发生这个问题,就是因为我们在默认状态下只处理那些动态的网页,像asp、aspx等,但当有请求一个图片文件时,IIS就会直接提取资源并发送给客户端,这样看来就显得有些盲目了,所以要创建自己的HttpHandler来处理图片文件
- 附上代码思路:创建一般处理程序来处理我们的文件
using System.Web;
//省略命名空间
public class Handler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//判断是否是本地引用,如果是则返回给客户端正确的图片
//这里的判断就是用到了HTTP请求中所记录的参考也的信息
if (context.Request.UrlReferrer.Host=="localhost")
{
//设置客户都安缓存文件过期时间为0,即立即过期
context.Response.Expires = 0;
//清空服务前端为此会话开辟的输出缓存
context.Response.Close();
//将请求文件写入到服务器端为此会话开辟的输出缓存中
context.Response.WriteFile(context.Request.PhysicalPath);
//将服务端为此会话开辟的输出缓存中的信息传送到客户端
context.Response.End();
}
else //如果不是本地引用,则属于盗链引用,返回非客户端错误的图片
{
context.Response.Expires = 0;
context.Response.Close();
context.Response.ContentType = "图片名称";
//将特殊的报告错误的图片文件写入服务器端为此会话开辟的输出缓存中
context.Response.WriteFile("error.jpeg");
context.Response.End();
}
}
public bool IsReusable
{
get
{
return false;
}
}
}