ASP.NET处理管道之防盗链

盗链就是在用户向网站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

原文地址:https://www.cnblogs.com/jbdxbl/p/9348495.html