图片盗链分析(二)

简介: HttpHandler是Http处理中心,真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。HttpHandler与HttpModule不同,一旦定义了自己的HttpHandler类,那么它对系统的HttpHandler的关系将是“覆盖”关系,那么它就是一个全局的。

HttpHandlerHttp处理中心,真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。HttpHandlerHttpModule不同,一旦定义了自己的HttpHandler类,那么它对系统的HttpHandler的关系将是覆盖关系,那么它就是一个全局的。

现对网站的gif图片进行防盗。

上一篇中通过ashx文件中对图片的处理来处理图片防盗,这里的道理是相同的。

(一)添加自定义HttpHandler

这里直接在网站里添加类,并添加到app_code文件夹中:

在这个类(HttpHandler)里,通过对请求的资源文件(可能是图片,例如:gif图)进行地址判断。对于请求的资源文件有2个地址:

·Host:这个是请求的地址

·Referer:这个是资源文件直接的包含地址,例如:在盗链异域图片的网站D中,请求图片的Referer就是这个网站D的地址。

然后因为这个图片的Referer地址与被盗的(可以说是Host)地址不同(域名不同),来响应一个固定的图片地址(盗链图片地址)来防盗链。

 

自定义的HandlerIhttpHandler接口派生,并实现两个方法。

 

public class GifHandler : IHttpHandler

{

    public bool IsReusable

    {

        get { return false; }

    }

    public void ProcessRequest(HttpContext context)

    {

        string FileName = context.Server.MapPath(context.Request.FilePath);

        if (context.Request.UrlReferrer.Host == null)

        {

            return;

        }

       

        if (context.Request.UrlReferrer.Host=="192.168.1.105")

        {

            context.Response.ContentType = "image/gif";

            context.Response.WriteFile(FileName);

            FileOperation.WriteFile(

context.Server.MapPath("../logs/"),

"log.txt", context.Request.UrlReferrer.Host);

        }

        else

        {

            context.Response.ContentType = "image/gif";

            context.Response.WriteFile("z1.gif");

        }    

    }

}

·判断是不是第一次请求,可以理解为是不是请求资源

context.Request.UrlReferrer.Host == null

·因为是请求资源,所以得到请求资源的资源的地址:

string FileName = context.Server.MapPath(context.Request.FilePath);

这里跟踪一下,这时,这个FileName的值是:E:\test8\FangdaoTest\images\a1.gif

本地测试时这里是一个完全的物理地址,通过它能找到这个文件。

·FileOperation.WriteFile方法。自己定义了一个文件写入方法,用于跟踪一些信息

·如果资源文件的请求地址是本域的,则返回正常的图片,否则显示盗链地址的图片

·这个Handler定义完后,还不能生效,要进行以下2步才可以。

(二)Web.Config中注册

system.web章节中定义:

<httpHandlers>

            <add path="*.gif" verb="*" type="GifHandler"/>

    </httpHandlers>

system.web章节中添加HttpHandlers节,并添加自定义的Handler

·path:表示请求的文件,这里表示所有的gif文件

·verb:谓词,这里接受任何谓词,即不管是post还是get,只要文件是gif的,就要通过这个handler来处理

·type:指定程序集,这里因为是在app_code里添加的类,所以这里只写类名就行了。

完成这2步就可以测试了。但对盗链不起作用,因为在IIS中还要添加对Gif图的映射处理。

(三)IIS中添加gif映射

·添加aspnet_isapi.dll,这里随便打开一个,复制一下就行了

·扩展名:.gif

以上三步完成后,gif图防盗就生效了

(四)在发布的网站上使用图片

<form id="form1" runat="server">

    <div>

        <img src="images/a1.gif" />

    </div>

</form>

页面效果:

(五)  Test.aspx中使用图片

<form id="form1" runat="server">

    <div>

        <img src="http://192.168.1.105:8029/images/a1.gif" />

    </div>

</form>

页面效果:

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
超好看的照片墙HTML源码
超好看的照片墙HTML源码
333 10
超好看的照片墙HTML源码
|
Unix Shell Linux
QGS
|
XML 前端开发 JavaScript
手搭手Ajax经典基础案例省市联动
手搭手Ajax经典基础案例省市联动
QGS
86 1
|
设计模式 Java Kotlin
Kotlin 学习笔记(三)—— Kotlin 的动态代理你会写吗?(下)
Kotlin 学习笔记(三)—— Kotlin 的动态代理你会写吗?(下)
220 1
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
132 3
|
SQL Java 关系型数据库
MyBatis-Plus 分页魅力绽放!紧跟技术热点,带你领略数据分页的高效与便捷
【8月更文挑战第29天】在 Java 开发中,数据处理至关重要,尤其在大量数据查询与展示时,分页功能尤为重要。MyBatis-Plus 作为一款强大的持久层框架,提供了便捷高效的分页解决方案。通过封装数据库分页查询语句,开发者能轻松实现分页功能。在实际应用中,只需创建 `Page` 对象并设置页码和每页条数,再通过 `QueryWrapper` 构建查询条件,调用 `selectPage` 方法即可完成分页查询。MyBatis-Plus 不仅生成分页 SQL 语句,还自动处理参数合法性检查,并支持条件查询和排序等功能,极大地提升了系统性能和稳定性。
407 0
|
10月前
|
缓存 负载均衡 安全
什么是CDN服务
CDN(内容分发网络)是全球分布的服务器网络,旨在加速互联网内容的传输。它通过将内容缓存至靠近用户的服务器,减少延迟,提升访问速度与性能,同时实现负载均衡、减轻源服务器压力并提供安全防护。广泛应用于网站加速、视频直播等领域,优化用户体验。
9898 5
|
11月前
|
存储 前端开发 安全
现货量化合约跟单交易所系统开发逻辑策略及源码示例
现货量化合约跟单交易所系统的开发涉及需求分析、技术选型、数据获取、策略设计、风险管理、交易接口、系统架构、安全合规、测试优化等多个环节。本文档详细介绍了开发策略指南及Python源码示例,涵盖从连接交易所API获取市场数据到系统部署和优化的全过程。
|
12月前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
520 5
数组相关算法题——LeetCode.27《移除元素》
数组相关算法题——LeetCode.27《移除元素》