开发者社区> 厅一一> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

图片盗链分析(二)

简介: 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/

转载请注明:博客园

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
教你优雅的处理网页中的图片
教你优雅的处理网页中的图片
0 0
解决图片 防盗链
js版解决方案 var url = 'https://mmbiz.qpic.cn/mmbiz_jpg/TAoksPVlXMI7dQPxiaUbAHvyJ19iaG9b2Ueh53iaqTsn6F8O3m63zcBibgNpujM1HNeCKX99vOo...
1055 0
网站盗链是什么?盗链与广告流量问题及如何防止
何谓盗链:百度百科解释(盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。
1605 0
ckedit 浏览图片和上传图片
&lt;head&gt;标签内引入 &lt;script src="${ctx}/ckeditor/ckeditor.js" type="text/javascript"&gt;&lt;/script&gt; config.js配置文件 CKEDITOR.editorConfig = function( config ) {  // Define changes to default con
1277 0
盗链
2014年1月14日 20:20:47 概念: 本来是你网站上的东西,却显示到了别人的网站上 图片盗链: 图片是你的图片,但是其他人复制了这个图片链接,粘贴到他的网站的代码里,这样当别人打开他网站的时候,却显示着你的东西 防范: 判断请求图片的来源URL,如果不是你的网站域名,就可以认为这张图...
582 0
图片盗链分析(二)
HttpHandler是Http处理中心,真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。HttpHandler与HttpModule不同,一旦定义了自己的HttpHandler类,那么它对系统的HttpHandler的关系将是“覆盖”关系,那么它就是一个全局的。
841 0
图片盗链分析(一)
现在探讨一下网站图片防盗链 一步一步的进行。 (一) 一个网页中对同域的图片的访问 [准备]在Vs中添加一网站,添加images图片文件夹,里边放一张a1.gif的图片,一张用于显示防盗链的图片z1.
699 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载