学习HttpModule和HttpHandler对象

HttpHabandler对象实现防盗链

防盗技术是Web项目开发过程中必定用到的技术,否则网站资源会被其他网站引用,并造成损失。

演示防盗链需求

1.创建第一个网站,建一个名为Images的jpg图片资源,保证正常显示

2.创建第二个网站,网站下有一个引用了上一个网站中jpg图片资源,结果不能正常显示图片资源,而会显示一个表示错误的图片

3.创建被盗链站点,按照如上要求,先创建包含了jpg图片资源网站,然后添加一个aspx页面

代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <img src="images/img_1.jpg" />
             <img src="images/img_2.jpg" />
             <img src="images/img_3.jpg" />
        </div>
    </form>
</body>
</html>

4.创建第二个盗链站点,添加aspx页面,引用第一个网站提供的三幅图片

注意:浏览第一个网站页面时,基于图片右键单击,选择复制图片地址及获取绝对路径

代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication2.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <p>以下图片资源来自第一个站点</p>
            <img src ="http://localhost:49320/images/img_1.jpg"/>
            <img src ="http://localhost:49320/images/img_2.jpg"/>
            <img src ="http://localhost:49320/images/img_3.jpg"/>
        </div>
    </form>
</body>
</html>

5.防盗链操作    

第二个网站盗取了第一个网站的图片资源,新建HttpHander类解决盗链

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication2
{
        public class PreventLink : IHttpHandler
        {
            public bool IsReusable
            {
                get{ return true;}
            }
            public void ProcessRequest(HttpContext context)
            {
                //获取上次请求的URL
                Uri lastUrl = context.Request.UrlReferrer;
                //获取本次请求的URL
                Uri currentUrl = context.Request.Url;
                //判断是否盗链
                 if(lastUrl.Host!=currentUrl.Host ||lastUrl.Port!= currentUrl.Port)
                {
                //获取“请勿盗链”警告提示图片路径
                    string errorlmgagePth = context.Request.PhysicalApplicationPath + "Error/img_8.jpg";
                //发送至客户端
                    context.Response.WriteFile(errorlmgagePth);
                }                                                                                                                                                                                                 
                else
                {
                    context.Response.WriteFile(context.Request.PhysicalPath);
                }
            }
       } 
  }

配置相关配置文件

在Web.config中配置实现当请求Images文件夹中的jpg图片时,由PreventLink类处理的功能

代码如下:

  <system.webServer>
    <handlers>
      <add verb="*" path ="images/*.jpg" type="PreventLink" name="plink"/>
    </handlers>
  </system.webServer>

注意:盗链的判断依据:上次请求的主机和端口与本次请求的主机和端口是否一致,诺不一致,则为盗链(页面中插入的图片要单独请求)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值