zoukankan      html  css  js  c++  java
  • 如何在ASP.NET中实现防盗链[转]

     

    对于网站盗链行为,是非常不道德的。我们也不能只是谴责那些没素质的家伙,最终还得在技术上防止网站资源被别人盗用。

    要实现防盗链,我们就得在IIS处理类似图片文件的资源时拦上一刀,检查它的通行证是否合法,不合法的请求我们就要坚决的毙掉。

    我们先来看一张有关IIS处理请求的图


    这张图片说名了一个ASP.NET 处理管道的流程。首先一个请求过来以后,会先被IIS(WinXP中的进程叫做aspnet_wp.exe,Win2003中叫做w3wp.exe),如果IIS发现请求的时asp页面,那么就交给asp.dll进行处理;如果请求的是一个aspx页面,那么就交给aspnet_isapi(IIS扩展)进行处理,如果是HTML 页面、文本文件、JPEG 和 GIF 图像,那么IIS进程就自己进行处理。

    我们看到在ASP.NET处理管道中要经历一个HttpModule和HttpHandler。我们要用到的就是HttpHandler。也就说我们要自己实现一个HttpHandler来处理图片啊,压缩包什么的请求。
    实现起来也不是很难,只要继承并实现IHttpHandler接口就可以了。



    其中 IsReusable 说明是否可以被缓存,而ProcessRequest方法就是如何进行处理的代码。

    1. 我们可以通过判断context.Request.UrlReferrer来分辩请求是否合法,然后通过context.Response.WriteFile(context.Request.PhysicalPath);来输出文件。
    2. 还要通过配置config文件来让asp.net知道有这个httphandler,格式类似于下面这个。


    • verb可以是"GET"或"POST",表示对GET或POST的请求进行处理。"*"表示对所有请求进行处理,这里是对GET请求进行处理。
    • path指明对相应的文件进行处理,"*.aspx"表示对发给所有ASPX页面的请求进行处理。
    • type属性中,逗号前的字符串指明HttpHandler的实现类的类名,后面的字符串指明Dll文件的名称。
    3. 最后还要配置IIS,将要处理的文件类型映射到aspnet_isapi.exe




    这样当有对gif图片的请求是就会通过我们的HttpHandler,让我们可以斩断盗链“黑手”。

    但是如何你要防止盗链的文件比较多,有gifjpgrarziptxtbmp,等等时,我们还要在web.config中进行配置么?如果Handler的变更要修改web.config,会造成网站的重启。是否有好的解决方案呢,大家可以去想想,找找。我下次在接着说:)

    参考资源:
    ugoer
    msdn


    本来想写来自哪里的,可是哪个图片是防止盗连的(汗....)就不写了,顺便ps dudu一下,以前上传图片都可以很大的,现在限制成了200k, 真不知道为什么?
  • 相关阅读:
    win10+anaconda+cuda配置dlib,使用GPU对dlib的深度学习算法进行加速(以人脸检测为例)
    Windows下的Anaconda+OpenCV的环境配置
    视频检测人脸添加帽子完美方案
    OpenCV学习C++接口 Mat像素遍历详解
    [hadoop读书笔记] 第一章 初识 Hadoop
    [hadoop读书笔记]前言
    [hadoop读书笔记]译者序
    [Docker] Docker简介
    [sqoop1.99.6] 基于1.99.6版本的一个小例子
    [sqoop1.99.7] sqoop实例——数据ETL
  • 原文地址:https://www.cnblogs.com/xucanzhao/p/378612.html
Copyright © 2011-2022 走看看