盗链就是在用户向网站a请求网站资源时,网站a将网站资源的路径填写为b网站资源的地址,用户将直接看到网站a上显示着网站b的资源,从而造成盗链。
要防止盗链,就要用到处理管道中的技术
在相应的模块类中:
void app_BeginRequest(object sender, EventArgs e) { HttpContext context = (sender as HttpApplication).Context; HttpRequest request = context.Request; string path = request.PhysicalPath;//拿到请求的物理地址 Uri url=request.Url; Uri urlRefer=request.UrlReferrer; //从物理地址中对比是不是要请求的jpg文件,并且将自己的域名和端口号和请求的进行对比,确定时外部请求还是内部请求 if (path.EndsWith(".jpg")&&(url.Host!=urlRefer.Host||url.Port!=urlRefer.Port )) { (sender as HttpApplication).CompleteRequest();//直接结束请求 } }
也可以将其中结束请求的代母替换掉,替换成显示自己准备好的图片:
首先要引入命名空间:using System.Drawing;
将if那部分改成:
if (path.EndsWith(".jpg")&&(url.Host!=urlRefer.Host||url.Port!=urlRefer.Port )) { Image img=Image.FromFile(context.Server.MapPath("~/alert.png")); img.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png); }
这样,对方盗用的图片将全部变成你自己准备好的alert.png