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