Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >ASP.NET 防盗链的实现[HttpHandler]

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

作者头像
跟着阿笨一起玩NET
发布于 2018-09-19 03:07:44
发布于 2018-09-19 03:07:44
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

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

有时我们需要防止其他网站直接引用我们系统中的图片,或下载文件链接。需要禁止盗链!在ASP.NET中可以方便的实现该功能! 做一个简单的盗链图片的示例,如下。新建立一个WebApplcation。新建立一个images文件夹,里面二张jpg图片,一张logo.jpg正常图片,一张用于提示非法盗链的图片Error.jpg图片。 页面default.aspx页面很简单。就一个图片如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<form id="form1" runat="server">    <div>    <img src="images/logo.jpg" />    </div>    </form>

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void ProcessRequest(HttpContext context)        {            //判断是否是本地网站引用图片,如果是则返回正确的图片            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 + "images/error.jpg");                //将输出缓存中的信息传送到客户端                context.Response.End();            }        }        //该属性表示HTTP请求是否可以使用当前处理        public bool IsReusable        {            get            {                return true;            }        }

该文件用于接管HTTP请求JPG格式的图片。如果是从主机localhost访问的,则允许。否则显示错误的图片! 到这里该文件还没有效果,需要在Web.config文件进行配置HttpHandler节点 如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<httpHandlers>        <add verb="*" path=".jpg" type="MyNamespace.Handler,MyNamespace"/>      </httpHandlers>

来测试下 启动

图片正常显示。如果将访问地址改为 http://127.0.0.1:2136/Default.aspx 效果如下

但此时将该项目发布到IIS中,运行

没有出现希望效果,这是因为通过IIS请求 并没有将.JPG的格式使用.NET引擎进行解释,而是如静态页面HTML一样直接返回给了用户,这时我们希望用户请求.JPG时也能像.ASPX一样即可解决这个问题,打开IIS。选择该网站 右键属性

点击配置

点击添加

添加.jpg后缀的请求。交给aspnet_isapi.dll处理,这样我们自己写的一般处理程序 Handler1.ashx就有效果了, 也许多心的朋友会问,我们不是在web.config中写了这样一个配置的吗?为什么没有作用呢。这是由于IIS对.jpg后缀的请求直接就加载图片返回了,这里并不会使用aspnet_isapi.dll处理,所以也就更加到达不了Handler1.ashx这一步,当我们在IIS中配置后,即可实现! 根据相同的原理也可以实现 下载文件的防盗链~原理雷同~ 拓展一下,使用该法还可以解决站内新闻资讯被人使用蜘蛛程序抓取的问题! 不过此法并非没有缺点,首要的就是会降低系统的性能!这个要看个人权衡了!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-02-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
HttpHandler介绍
在 Http请求处理流程 一文中,我们了解了Http请求的处理过程以及其它一些运作原理。我们知道Http管道中有两个可用接口,一个是IHttpHandler,一个是IHttpModule,但在Part.1中,我并没有详细讲述如何对它们进行编程,只是轻描淡写地一笔带过。所谓学以致用,前面已经介绍了不少概念和原理。在本文中,我们通过几个范例来了解 IHttpHandler,看看掌握这些原理的实际用途。
张子阳
2018/09/27
1.1K0
HttpHandler介绍
理解并自定义HttpHandler
前言                                      之前从网上找了几篇讲解如何自定义HttpHandler的文章,依葫芦画瓢却一直没成功过。经过上一篇《asp.net管道模型(管线模型)之一发不可收拾》的总结,对管道模型和请求/响应过程有进一步的了解后,再结合Asp.Net 构架(Http Handler 介绍) - Part.2后终于成功定义自己的HttpHandler和HttpHandlerFactory了^_^、   本文有些地方会跟《asp.net管道模型(管线模型)之一
^_^肥仔John
2018/01/18
1.2K0
理解并自定义HttpHandler
ASP.NET 运行机制详解
1.浏览器和服务器的交互原理 通俗描述:我们平时通过浏览器来访问网站,其实就相当于你通过浏览器去访问一台电脑上访问文件一样,只不过浏览器的访问请求是由被访问的电脑上的一个 WEB服务器软件来接收处理,它会分析接收到的请求信息,从而按照请求信息来找到服务器电脑上的文件,经过处理,最终将生成的内容发回到浏览器。 简单的说就是:由浏览器生成一条“命令”,通过互联网发给另一台电脑的某个软件(服务器软件);服务器软件接收到“命令”,就分析理解这个“命令”,然后按照“命令”找到服务器电脑上的文件,将文件内容发送回浏览器
hbbliyong
2018/03/06
2.1K0
ASP.NET 运行机制详解
WCF技术剖析之二:再谈IIS与ASP.NET管道
在2007年9月份,我曾经写了三篇详细介绍IIS架构和ASP.NET运行时管道的文章,深入介绍了IIS 5.x与IIS 6.0HTTP请求的监听与分发机制,以及ASP.NET运行时管道对HTTP请求的处理流程: [原创]ASP.NET Process Model之一:IIS 和 ASP.NET ISAPI [原创]ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline - Part I [原创]ASP.NET Process Model之二:ASP.N
蒋金楠
2018/01/16
1.6K0
WCF技术剖析之二:再谈IIS与ASP.NET管道
ASP.NET的(HttpModule,HttpHandler)
在以前的ASP时候,当请求一个*.asp页面文件的时候,这个HTTP请求首先会被一个名为inetin网络
Java架构师必看
2020/10/16
6740
ASP.NET-自定义HttpModule与HttpHandler
古时的风筝
2018/01/08
1.9K0
ASP.NET-自定义HttpModule与HttpHandler
WCF技术剖析之二:再谈IIS与ASP.NET管道
在2007年9月份,我曾经写了三篇详细介绍IIS架构和ASP.NET运行时管道的文章,深入介绍了IIS 5.x与IIS 6.0HTTP请求的监听与分发机制,以及ASP.NET运行时管道对HTTP请求的处理流程:
莫问今朝
2019/02/25
1.2K0
ASP.NET三剑客 HttpApplication HttpModule HttpHandler 解析
我们都知道,ASP.Net运行时环境中处理请求是通过一系列对象来完成的,包含HttpApplication,HttpModule, HttpHandler。之所以将这三个对象称之为ASP.NET三剑客是因为它们简直不要太重要,完全是ASP.NET界的中流砥柱,责任担当啊。了解它们之前我们得先知道ASP.NET管道模型。
撸码那些事
2018/05/21
2.3K0
ASP.NET三剑客 HttpApplication HttpModule HttpHandler 解析
Asp.net 一般处理程序+扩展
在上一篇博客中,提到一般处理程序真的不一般。这篇博客主要是给大家解惑。由于最近在做项目的过程中,用到了很多的一般处理程序,相信你也一定用到过,但是你真的了解它吗?
程序猿小亮
2021/01/29
9490
ASP.NET是如何在IIS下工作的
ASP.NET与IIS是紧密联系的,由于IIS6.0与IIS7.0的工作方式的不同,导致ASP.NET的工作原理也发生了相应的变化。 IIS6(IIS7的经典模式)与IIS7的集成模式的不同 IIS6
古时的风筝
2018/01/08
3K0
ASP.NET是如何在IIS下工作的
ASP.NET Core中间件与HttpModule有何不同
在ASP.NET Core中最大的更改之一是对Http请求管道的更改,在ASP.NET中我们了解HttpHandler和HttpModule但是到现在这些已经被替换为中间件那么下面我们来看一下他们的不同处。
HueiFeng
2020/06/08
9080
Asp.Net MVC3 简单入门第一季(四)详解Request Processing Pipeline
      很久没更新了,今天写点关于Asp.Net MVC的PipeLine。首先我们确认一点,Asp.Net WebFrom和Asp.Net MVC是在.Net平台下的两种web开发方式。其实他们都是基于Asp.Net Core的不同表现而已。看下面一张图,我们就能理解了WebForm和Asp.Net MVC的一个关系了。
老马
2022/05/10
6270
Asp.Net MVC3 简单入门第一季(四)详解Request Processing Pipeline
ASP.NET Core中间件与HttpModule有何不同
在ASP.NET Core中最大的更改之一是对Http请求管道的更改,在ASP.NET中我们了解HttpHandler和HttpModule但是到现在这些已经被替换为中间件那么下面我们来看一下他们的不同处。
Jlion
2022/04/07
6760
网页优化系列二:使用Cache缓存静态文件、图片(asp.net版)
  网站中存在一些不会经常变更的内容如静态文件、图片等,我们称之为静态资源。针对这些静态资源使用cache缓存到客户端中,以减少用户再次浏览该网页时的请求量,从而加速了网页的加载、呈现速度。同样,要设置静态资源缓存到客户端,我们需要加一个中间层来处理静态资源的请求。下面以图片为例进行说明。(若图片十分巨大情况下才使用该方法,若图片k级数的话,初次加载速度会更慢,因为IIS对于静态文件和动态文件的处理是不同的,如果图片容量小,动态文件处理的时间占大部分总体加载时间) 未优化:   Default.aspx
^_^肥仔John
2018/01/18
2.4K0
网页优化系列二:使用Cache缓存静态文件、图片(asp.net版)
Asp.net管道模型(管线模型)之一发不可收拾
前言                                   为什么我会起这样的一个标题,其实我原本只想了解asp.net的管道模型而已,但在查看资料的时候遇到不明白的地方又横向地查阅了其他相关的资料,而收获比当初预想的大了很多。   有本篇作基础,下面两篇就更好理解了: 理解并自定义HttpHandler 理解并自定义HttpModule 目录                                   一般不写目录,感觉这次要写的东西有些多就写一个清晰一下吧。   1.Asp.
^_^肥仔John
2018/01/18
2.4K0
Asp.net管道模型(管线模型)之一发不可收拾
ASP.NET那点不为人知的事(一)
我们上网时,在浏览器地址输入网址,按下回车,一张网页就呈现在我们眼前。这究竟发生了什么?对于一名优秀的Programmer来说,我想有必要一下熟悉浏览器--->服务器请求的过程。 ASP.NET ASP.NET是运行在公共语言运行时刻时(CLR)上的应用程序框架。他用来在服务器端构建功能强大的web应用程序。当浏览器请求 ASP.NET 文件时,IIS 会把该请求传递给服务器上的 ASP.NET 引擎,ASP.NET 引擎会逐行地读取该文件,并执行文件中的脚本,最后,ASP.NET 文件会以纯 HT
用户1161731
2018/01/11
1.1K0
ASP.NET那点不为人知的事(一)
HttpModule介绍
Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler接口的类进行处理(应该记得Page类实现了IHttpHandler)。从 Http 请求处理流程 一文的最后的一幅图中可以看到,在Http请求由IHttpHandler处理之前,它需要通过一系列的Http Module;在请求处理之后,它需要再次通过一系列的Http Module,那么这些Http Module是如何组成的?用来做什么呢?本文将对Http Module作以介绍。
张子阳
2018/09/27
6260
HttpModule介绍
模块和处理程序之通过HttpModule和HttpHandler拦截入站HTTP请求执行指定托管代码模块
1、简介 大多数情况下,作为一个asp.net web开发对整个web应用程序的控制是十分有限的,我们的控制往往只能做到对应用程序(高层面)的基本控制。但是,很多时候,我们需要能够低级层面进行交互,例如:Web服务器如何处理入站的出站的Http请求,这就需要找到与iis交互的方法! 在Asp.Net推出之前,为了获得IIS这个级别的控制,必须创建和扩展ISAPI扩展或过滤器,但是如果使用这个方法,必须具备C和C++的知识,并需要知道如何创建本机的Win32 Dll,所以为了解决这个问题,ASP.NET提供了
郑小超.
2018/01/26
1.2K0
Asp.net_Study学习笔记
HTTP Error 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容。
Echo_Wish
2023/11/30
2360
Asp.net_Study学习笔记
asp.net 伪静态实现(UrlRewritingNet)
UrlRewritingNet.UrlRewriter源码地址 https://github.com/aspnetde/UrlRewritingNet 部署步骤: 步骤一: <!--只允许存在一个 <configSections> 元素,并且,如果存在该元素,它还必须是根 <configuration> 元素的第一个子元素--> <configSections> <!--步骤一,新静态规则应用添加--> <section name="urlrewritingnet" requirePe
纯粹是糖
2018/03/14
2.2K0
相关推荐
HttpHandler介绍
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验