zoukankan      html  css  js  c++  java
  • 图片防盗链实现

    项目结构如下

    代码一:

    ImageCalss

    namespace 防盗链.Handler
    {
        public class ImageClass : IHttpHandler
        {
            public bool IsReusable
            {
                get { return false; }
            }
    
            //禁止盗链的图片
            const string errImg = "/Content/Images/daolian.jpg";
            public void ProcessRequest(HttpContext context)
            {
                //获取文件服务器物理地址
                string fileName = context.Server.MapPath(context.Request.FilePath);
    
                //如果UrlReferrer为空,则显示一张默认的禁止盗链的图片
                if (context.Request.UrlReferrer == null || context.Request.Url.Host == null)
                {
                    context.Response.ContentType = "image/JPEG";
                    context.Response.WriteFile(context.Server.MapPath(errImg));
                }
                else
                {
                    if (context.Request.UrlReferrer.Host.IndexOf("www.testdao.com") > -1)
                    {
                        context.Response.ContentType = "image/JPEG";
                        context.Response.WriteFile(fileName);
                    }
                    else
                    {
                        context.Response.ContentType = "image/JPEG";
                        context.Response.WriteFile(context.Server.MapPath(errImg));
                    }
                }
            }
        }
    }

    代码二:在Web.config中的<system.web>节点下加上这句话,用来指定当请求/Content/Images/文件夹下面的图片的时候,去动态的执行“Verb”指定的另一个执行类去处理.

     <!-- HttpHandlers对请求的扩展名进行处理 -->
        <httpHandlers>
          <add  path="/Content/Images/*.jpg,*.jpeg,*.gif,*.png,*.bmp"  verb="*" type="防盗链.Handler.ImageClass,防盗链"/>
        </httpHandlers>

    测试盗链效果如下 :

    配置IIS,模拟一个上线发布的网站:如 ”http://www.testdao.com/Content/Images/tupian.jpg“, 能正常显示图片,因为是本网站。

    如图:

    如果不配置IIS,就相当于引入了”http://www.testdao.com“ 网站的图片,就会返回一个盗链图片的图片,

    如图:

    您的支持是我最大的动力,如果你觉得还可以,请您给个”推荐“!

  • 相关阅读:
    一个主板上连接两个都有引导的盘
    pytorch查看模型weight与grad
    linux终端窗口字体缩放快捷键
    vim选中多行缩进(python多行缩进)与删除多行前面的空格
    python import 包的路径以及相对路径加载的问题
    pycharm中添加PATH变量
    Atom选中多行操作
    php扩展 swoole的安装与使用
    12121212
    linux系统下清理所有Redis缓存
  • 原文地址:https://www.cnblogs.com/Kummy/p/2935088.html
Copyright © 2011-2022 走看看