本文转载:http://www.cnblogs.com/eflylab/archive/2008/06/16/1223373.html
偶尔我们用防其他网站一直引用我们系受到的图形,或下载文件链接。需要禁止盗链!在ASP.NET中好一本万利之实现该功能!
做一个大概的盗链图片的示范,如下。新植一个WebApplcation。新建立一个images文件夹,里面二张jpg图片,一摆logo.jpg正常图片,一张用于提示地下盗链的图纸Error.jpg图片。
页面default.aspx页面很简短。就一个图形如下
<form id=”form1″ runat=”server”>
<div>
<img src=”images/logo.jpg” />
</div>
</form>
这里运用HttpHandler来处理盗链问题
初建立一个
一般处理程序 Handler1.ashx.代码及注释如下
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节点
如下
<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。选择该网站
右键属性
注册免费送38元体验金点击配置
点击添加
补给加.jpg后缀的求。交给aspnet_isapi.dll处理,这样我们协调写的貌似处理程序
Handler1.ashx虽时有发生效益了,
可能多心的朋友会问,我们无是在web.config中描绘了如此一个配备的啊?为什么从来不作用吗。这是由IIS对.jpg后缀的恳求直接就加载图片返回了,这里连无见面以aspnet_isapi.dll处理,所以啊即越是到达不了Handler1.ashx这等同步,当我们以IIS中配置后,即可兑现!
因同样的法则也可实现
下充斥文件的防盗链~原理同~
拓展一下,使用该法还足以缓解站外新闻资讯被人下蜘蛛程序抓取的题材!
而是此法并非没有缺陷,首要之即是会见跌系统的特性!这个只要看个人权衡了!