菜单

ASP.NET 防盗链的落实[HttpHandler]

2018年9月12日 - 注册免费送38元体验金

本文转载:http://www.cnblogs.com/eflylab/archive/2008/06/16/1223373.html

偶尔我们用防其他网站一直引用我们系受到的图形,或下载文件链接。需要禁止盗链!在ASP.NET中好一本万利之实现该功能!
做一个大概的盗链图片的示范,如下。新植一个WebApplcation。新建立一个images文件夹,里面二张jpg图片,一摆logo.jpg正常图片,一张用于提示地下盗链的图纸Error.jpg图片。
页面default.aspx页面很简短。就一个图形如下

注册免费送38元体验金 1<form id=”form1″ runat=”server”>
注册免费送38元体验金 2    <div>
注册免费送38元体验金 3    <img src=”images/logo.jpg” />
注册免费送38元体验金 4    </div>
注册免费送38元体验金 5    </form>

这里运用HttpHandler来处理盗链问题
初建立一个
一般处理程序 Handler1.ashx.代码及注释如下

注册免费送38元体验金 6public void ProcessRequest(HttpContext context)
注册免费送38元体验金 7        {
注册免费送38元体验金 8            //判断是否是地面网站援引图片,如果是则回正确的图形
注册免费送38元体验金 9            if (context.Request.UrlReferrer.Host == “localhost”)
注册免费送38元体验金 10            {
注册免费送38元体验金 11                //设置客户端缓冲时间过时也0,即立即过期
注册免费送38元体验金 12                context.Response.Expires = 0;
注册免费送38元体验金 13                //清空服务器端为是会话开启之出口缓存
注册免费送38元体验金 14                context.Response.Clear();
注册免费送38元体验金 15                //设置输出文件类型
注册免费送38元体验金 16                context.Response.ContentType = “image/jpg”;
注册免费送38元体验金 17                //将请求文件写副到输出缓存中
注册免费送38元体验金 18                context.Response.WriteFile(context.Request.PhysicalPath);
注册免费送38元体验金 19                //将出口缓存中之音传递到客户端
注册免费送38元体验金 20                context.Response.End();
注册免费送38元体验金 21            }
注册免费送38元体验金 22            //如果不是地面引用,则是偷链本站图片
注册免费送38元体验金 23            else
注册免费送38元体验金 24            {
注册免费送38元体验金 25                //设置客户端缓冲时间过时呢0,即立即过期
注册免费送38元体验金 26                context.Response.Expires = 0;
注册免费送38元体验金 27                //清空服务器端为者会话开启的出口缓存
注册免费送38元体验金 28                context.Response.Clear();
注册免费送38元体验金 29                //设置输出文件类型
注册免费送38元体验金 30                context.Response.ContentType = “image/jpg”;
注册免费送38元体验金 31                //将请求文件写副到输出缓存中
注册免费送38元体验金 32                context.Response.WriteFile(context.Request.PhysicalApplicationPath + “images/error.jpg”);
注册免费送38元体验金 33                //将出口缓存中之音讯传送至客户端
注册免费送38元体验金 34                context.Response.End();
注册免费送38元体验金 35            }
注册免费送38元体验金 36        }
注册免费送38元体验金 37        //该属性表示HTTP请求是否足以行使时处理
注册免费送38元体验金 38        public bool IsReusable
注册免费送38元体验金 39        {
注册免费送38元体验金 40            get
注册免费送38元体验金 41            {
注册免费送38元体验金 42                return true;
注册免费送38元体验金 43            }
注册免费送38元体验金 44        }

该公文用于接管HTTP请求JPG格式的图片。如果是由主机localhost访问的,则允许。否则显示错误的图样!
至此处该文件还不曾效力,需要以Web.config文件进行配备HttpHandler节点
如下

注册免费送38元体验金 45<httpHandlers>
注册免费送38元体验金 46        <add verb=”*” path=”.jpg” type=”MyNamespace.Handler,MyNamespace”/>
注册免费送38元体验金 47      </httpHandlers>

来测试下
启动
注册免费送38元体验金 48
图片正常显示。如果将做客地址变更吗 http://127.0.0.1:2136/Default.aspx 效果如下
注册免费送38元体验金 49 

可此时拿该型揭示暨IIS中,运行
注册免费送38元体验金 50
尚无起希望效果,这是坐经过IIS请求
并从未将.JPG的格式使用.NET引擎进行说明,而是要静态页面HTML一样直接返回给了用户,这时我们想用户请求求.JPG时也克像.ASPX一样即可解决这个题目,打开IIS。选择该网站
右键属性
注册免费送38元体验金 51
注册免费送38元体验金点击配置
注册免费送38元体验金 52
点击添加
注册免费送38元体验金 53
补给加.jpg后缀的求。交给aspnet_isapi.dll处理,这样我们协调写的貌似处理程序
Handler1.ashx虽时有发生效益了,
可能多心的朋友会问,我们无是在web.config中描绘了如此一个配备的啊?为什么从来不作用吗。这是由IIS对.jpg后缀的恳求直接就加载图片返回了,这里连无见面以aspnet_isapi.dll处理,所以啊即越是到达不了Handler1.ashx这等同步,当我们以IIS中配置后,即可兑现!

因同样的法则也可实现
下充斥文件的防盗链~原理同~ 

拓展一下,使用该法还足以缓解站外新闻资讯被人下蜘蛛程序抓取的题材!

而是此法并非没有缺陷,首要之即是会见跌系统的特性!这个只要看个人权衡了!

相关文章

标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图