真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

asp.netMVC網(wǎng)站圖片實(shí)現(xiàn)防盜鏈的方法

asp.net MVC網(wǎng)站圖片實(shí)現(xiàn)防盜鏈的方法?這個(gè)問(wèn)題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見(jiàn)到的。希望通過(guò)這個(gè)問(wèn)題能讓你收獲頗深。下面是小編給大家?guī)?lái)的參考內(nèi)容,讓我們一起來(lái)看看吧!

創(chuàng)新互聯(lián)秉承實(shí)現(xiàn)全網(wǎng)價(jià)值營(yíng)銷(xiāo)的理念,以專(zhuān)業(yè)定制企業(yè)官網(wǎng),成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè),小程序制作,網(wǎng)頁(yè)設(shè)計(jì)制作,手機(jī)網(wǎng)站開(kāi)發(fā),營(yíng)銷(xiāo)型網(wǎng)站建設(shè)幫助傳統(tǒng)企業(yè)實(shí)現(xiàn)“互聯(lián)網(wǎng)+”轉(zhuǎn)型升級(jí)專(zhuān)業(yè)定制企業(yè)官網(wǎng),公司注重人才、技術(shù)和管理,匯聚了一批優(yōu)秀的互聯(lián)網(wǎng)技術(shù)人才,對(duì)客戶(hù)都以感恩的心態(tài)奉獻(xiàn)自己的專(zhuān)業(yè)和所長(zhǎng)。

1. 通過(guò) URL Rewrite Module組件

這是一個(gè)比較簡(jiǎn)單,方便的方法。首先要去 Url Rewite 官網(wǎng) 下載 URL Rewrite Module 2.0 并安裝。安裝完成后可以看到 IIS設(shè)置里多了  URL重寫(xiě) 的模塊如下圖:

asp.net MVC網(wǎng)站圖片實(shí)現(xiàn)防盜鏈的方法

在這里,可以對(duì)URL訪問(wèn)規(guī)則進(jìn)行設(shè)置, 雙擊 URL 重寫(xiě),添加入站規(guī)則

asp.net MVC網(wǎng)站圖片實(shí)現(xiàn)防盜鏈的方法

asp.net MVC網(wǎng)站圖片實(shí)現(xiàn)防盜鏈的方法

在條件(c)  里面添加  {HTTP_REFERER}    模式為: ^http://localhost/.*$, 意思是 請(qǐng)求  HTTP_REFERER 必須包含 http://localhost/ 字符,規(guī)則當(dāng)然是根據(jù)自己的情況寫(xiě)。

添加保存后,站點(diǎn)的 web.config 文件的 system.webServer 節(jié)點(diǎn)下就多了 rewrite 節(jié)點(diǎn),配置如下。

           
       
  

配置好了,有沒(méi)有效果呢,我們做一個(gè)測(cè)試頁(yè)面試試

里面有2張圖片,由于在IIS “入站規(guī)則條件” 里面配置的  HTTP_REFERER  正則表達(dá)式為 ^http://localhost/.*$  如果規(guī)則有效,我們?cè)L問(wèn) http://localhost/HtmlPage1.html  圖片應(yīng)正常顯示,而如果通過(guò)  http://127.0.0.1/HtmlPage1.html  訪問(wèn)是不應(yīng)該顯示圖片的,下面是我通過(guò)這兩個(gè)地址訪問(wèn)效果。

asp.net MVC網(wǎng)站圖片實(shí)現(xiàn)防盜鏈的方法    asp.net MVC網(wǎng)站圖片實(shí)現(xiàn)防盜鏈的方法

說(shuō)明配置是成功的。當(dāng)然了,URL Rewrite Module 并非僅僅做圖片防盜鏈喲!

2. 通過(guò) nginx圖片防盜鏈

防盜鏈的原理都是一樣的,主要是通過(guò) referer 判斷來(lái)源站點(diǎn),如果來(lái)源站點(diǎn)不在 “白名單” 里,則拒絕或返回一張默認(rèn)圖片

location ~.*\.(jpg|gif|png)$ {
     valid_referers none blocked *.abc.com abc.com;     if ($invalid_referer) {
     #rewrite ^/ http://abc.com/error.html;     return 403;
      }
}
location ~.*\.(jpg|gif|png)$  表示所有 以 jpg|gif|png 為后綴名的文件都進(jìn)行防盜鏈處理
valid_referers none blocked *.abc.com abc.com;   驗(yàn)證 referer  其中 none 表示直接訪問(wèn)的,不存在referer   blocked為根據(jù)防火墻偽裝的 referer
  如果圖片是放盜鏈,重定向到 地址 ,一般是圖片地址,但是要注意,這個(gè)圖片地址不只能在此防盜鏈規(guī)則里,否則也訪問(wèn)不到。

對(duì) nginx 配置不熟悉的同學(xué)請(qǐng)參考  windows 下配置 Nginx 常見(jiàn)問(wèn)題
方法步驟: 1 創(chuàng)建自定義 handlers 代碼如下,根據(jù) Referre 判斷請(qǐng)求來(lái)源,如果符合標(biāo)準(zhǔn),輸出文件流,否則停止響應(yīng)。也可以輸出一個(gè)特定的圖片。
namespace WeiXinDemo.Globals
{/// /// 測(cè)試 Handler 實(shí)現(xiàn)圖片防盜鏈/// public class MyImgHandler : IHttpHandler
    {public bool IsReusable
        {get { return false; }
        }         public void ProcessRequest(HttpContext context)
        {var response = context.Response;var request = context.Request; if (request.UrlReferrer == null || !WebApplication.ImgHost.Equals(request.UrlReferrer.Host))
            {
                response.End();return;
            }var fileName = context.Server.MapPath(request.FilePath);
            response.WriteFile(fileName);if (request.UrlReferrer == null || WebApplication.ImgHost.Equals(request.UrlReferrer.Host))
            {
                response.WriteFile(fileName);
            }else{
                response.End();
            }
        } 
    }
}
2 在web.config 文件 handlers 節(jié)點(diǎn)下添加自定義 Handler,滿足要求的請(qǐng)求進(jìn)入  進(jìn)行處理
         
      
 
 


4. 通過(guò)MVC 自定義路由規(guī)則防盜鏈

   首先我們要在 web.config 文件里 system.webServer 節(jié)點(diǎn)下 設(shè)置  同時(shí)還要在 RouteConfig.cs 文件里添加 routes.RouteExistingFiles = true;確保所有路由都通過(guò) RouteCollection 匹配 。
在這里我們需要了解 UrlRoutingModule,它是System.Web.Routing的一部分。UrlRoutingModule用于檢驗(yàn)請(qǐng)求的url和本地硬盤(pán) 中的文件能不能相匹配。如果匹配,則交給IIS處理。如果不匹配它會(huì)檢驗(yàn) RouteCollection 來(lái)決定能不能繼續(xù)傳遞請(qǐng)求。而設(shè)置了 runAllManagedModulesForAllRequests="true" 后,會(huì)改變默認(rèn)行為,所有請(qǐng)求都須要 運(yùn)用 Routing來(lái)處理。
           
       
  

配置文件設(shè)置好以后添加自定義路由規(guī)則,下面是自定義路由規(guī)則的實(shí)現(xiàn)代碼,其實(shí)里面就做了一件事,使用正則表達(dá)式判斷當(dāng)前請(qǐng)求是否符合規(guī)則,如果符合規(guī)則,則進(jìn)入指定的處理頁(yè)面,否則去匹配其他的路由規(guī)則。


namespace WeiXinDemo.Globals
{/// /// 圖片路由規(guī)則(自定義)/// public class ImgRouteRule : IRouteConstraint
    {  public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {var regex = new Regex(@"/[^/]+(.jpg|.bmp|.gif|.png)");var result = regex.IsMatch(httpContext.Request.RawUrl); return result;
        }
    }
}

這樣就造成了一個(gè)問(wèn)題,所有的請(qǐng)求(比如 .css  .js  .htm 等等)都去路由規(guī)則里面去匹配,如果在路由規(guī)則里面匹配不到那么就會(huì)返回 404,如何避免呢?通過(guò) RouteConfig.cs 文件配置忽略。

public class RouteConfig
    {public static void RegisterRoutes(RouteCollection routes)
        {//確保所有路由都通過(guò) RouteCollection 匹配(圖片防盜鏈)routes.RouteExistingFiles = true;//忽略 json,html,js,css文件routes.IgnoreRoute("{*pathInfo}", new { pathInfo = @".+(.json|.html|.js|.css)" });
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); //符合路由規(guī)則的轉(zhuǎn)到控制器 ImgRule/Index 處理 (自定義路由規(guī)則實(shí)現(xiàn) 圖片防盜鏈)            routes.MapRoute(
                name: "ImagesRoute",
                url: "{*catchall}",
                defaults: new { controller = "ImgRule", action = "Index" },// ImgRouteRule 為自定義路由規(guī)則,符合此規(guī)則,進(jìn)入路由 訪問(wèn) ImgRule/Index constraints: new { customConstraint = new ImgRouteRule() },//控制器類(lèi)命名空間namespaces: new[] { "WeiXinDemo.Controllers" });

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );            
        }
    }

在上面的代碼里配置了 "ImagesRoute"   的路由,使用的自定義路由規(guī)則,當(dāng)滿足規(guī)則時(shí),跳轉(zhuǎn)到 ImgRule/Index去處理,處理代碼跟使用 HttpHandler 類(lèi)似

 public class ImgRuleController : Controller
    {// GET: ImgRulepublic FileStreamResult Index()
        {var fPath = Server.MapPath("~" + Request.FilePath);if (Request.UrlReferrer == null)   return null;            if (!System.IO.File.Exists(fPath) || !WebApplication.ImgHost.Equals(Request.UrlReferrer.Host) || !WebApplication.ImgHost.Equals(Request.UrlReferrer.Host))            return null; return GetFile(fPath);
        }private FileStreamResult GetFile(string fPath)
        { return File(new FileStream(fPath, FileMode.Open, FileAccess.Read), GetContentType(Request.FilePath));
        }private static string GetContentType(string url)
        {switch (Path.GetExtension(url))
            {case ".gif":return "Image/gif";case ".jpg":return "Image/jpeg";case ".png":return "Image/png";default:break;
            }return null;
        }
    }

5. 通過(guò)MVC 自定義 RouteHandler 防盜鏈
1  文件配置同,也要開(kāi)啟 
2 創(chuàng)建自定義路由,自定義路實(shí)現(xiàn)代碼如下  ,同時(shí)還有自定義路由調(diào)用的  ,
using System.IO;using System.Text.RegularExpressions;using System.Web;using System.Web.Routing;namespace WeiXinDemo.Globals
{/// /// 測(cè)試自定義 RouteHandler 圖片防盜鏈/// public class ImageRouteHandler : IRouteHandler
    {public IHttpHandler GetHttpHandler(RequestContext requestContext)
        { return new ImageHandler();
        }
    }     /// /// 自定義路由調(diào)用的 HttpHandler/// public class ImageHandler : IHttpHandler
    {public ImageHandler()
        {
            
        }         public bool IsReusable
        {get{return true;
            }
        } public void ProcessRequest(HttpContext context)
        {var response = context.Response;var request = context.Request; if (request.UrlReferrer == null || !WebApplication.ImgHost.Equals(request.UrlReferrer.Host))
            {
                response.End();return;
            }var fileName = context.Server.MapPath(request.FilePath);
            response.WriteFile(fileName);  
        }
    }
}

RouteConfig.cs 文件配置 如下,這里指定了 對(duì)根目錄下的 jpg 文件的訪問(wèn)進(jìn)入指定路由處理程序 ImageRouteHandler。    其實(shí)這里可以把圖片都放在某一個(gè)特定文件夾下,然后對(duì)這個(gè)文件夾下文件的訪問(wèn)做放盜鏈。

namespace WeiXinDemo
{public class RouteConfig
    {public static void RegisterRoutes(RouteCollection routes)
        {//確保所有路由都通過(guò) RouteCollection 匹配(圖片防盜鏈)routes.RouteExistingFiles = true;//忽略 json,html,js,css文件routes.IgnoreRoute("{*pathInfo}", new { pathInfo = @".+(.json|.html|.js|.css)" });
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");//圖片防盜鏈routes.Add("ImagesRoute",new Route("{name}.jpg", new ImageRouteHandler())); routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
            
        }
    }
}

6. 通過(guò)HttpModule 防盜鏈
1. 修改 web.config 配置文件
                 
  

2. 創(chuàng)建實(shí)現(xiàn) IHttpModule 接口的 ImageModel 類(lèi)

     +=  BeginRequest(= regex =  Regex( request = (!regex.IsMatch(request.RawUrl))  (request.UrlReferrer ==  || ! fileName =

3.  RouteConfig.cs 文件忽略不需要防盜鏈的靜態(tài)資源

using System.Web.Mvc;using System.Web.Routing;namespace WeiXinDemo
{public class RouteConfig
    {public static void RegisterRoutes(RouteCollection routes)
        {//確保所有路由都通過(guò) RouteCollection 匹配(圖片防盜鏈)routes.RouteExistingFiles = true;//忽略 json,html,js,css文件routes.IgnoreRoute("{*pathInfo}", new { pathInfo = @".+(.json|.html|.js|.css)" });
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );            
        }
    }
}
7. 涉及知識(shí)

本文只做了一件事情,圖片防盜鏈,其實(shí)從不同的實(shí)現(xiàn)方式來(lái)看它涉及到不同的知識(shí)。

1. URL Rewrite Module  組件的使用

如何使用mod_rewrite模塊完成URL重寫(xiě)

Creating Rewrite Rules for the URL Rewrite Module

2.  Nginx

借助Nginx搭建反向代理服務(wù)器

使用nginx實(shí)施負(fù)載均衡

3. IIS 工作原理,asp.net 管線

IIS是如何處理ASP.NET請(qǐng)求的

ASP.NET那點(diǎn)不為人知的事

IIS 內(nèi)部運(yùn)行機(jī)制

ASP.NET MVC5請(qǐng)求管道和生命周期

ASP.NET MVC請(qǐng)求處理管道生命周期的19個(gè)關(guān)鍵環(huán)節(jié)(1-6)

4. Mvc UrlRouting 處理機(jī)制

MVC之前的那點(diǎn)事兒系列(8):UrlRouting的理解

感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)asp.net MVC網(wǎng)站圖片實(shí)現(xiàn)防盜鏈的方法大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


文章名稱(chēng):asp.netMVC網(wǎng)站圖片實(shí)現(xiàn)防盜鏈的方法
路徑分享:http://weahome.cn/article/psjohi.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部