asp.net中利用ashx实现图片防盗链代码

GET /Img.ashx?img=svn_work.gif HTTP/1.1
Accept: */*
Referer: http://www.svnhost.cn/
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; CIBA)
Host: www.svnhost.cn
Connection: Keep-Alive
该数据包表示请求http://www.svnhost.cn/Img.ashx?img=svn_work.gif文件。我们可以看到Referer表示上一页请求页面地址,也就是文件来源。Host表示当前请求的主机地址。
下面是一个盗链的数据包
GET /Img.ashx?img=svn_work.gif HTTP/1.1
Accept: */*
Referer: http://745.cc/
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; CIBA)
Host: www.svnhost.cn
Connection: Keep-Alive
我们可以看到,上面两个数据,表示对于同一个文件:http://www.corange.cn/Img.ashx?img=svn_work.gif的请求过程,这里的不同就是Referer,也就是都是请求同一个文件,但是请求的来源是不同的。因此我们可以在程序里判断是否是来源于当前服务器,来判断是否是盗链。明白原理以后,实现防盗链就非常简单了。下面以图片防盗链来实现一个演示。ASP.NET中添加一个img.ashx文件,然后后台代码如下:


代码如下:

using System;
using System.Collections;
using System.Data;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
namespace GetImage
{
/// <summary>
/// $codebehindclassname$ 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Img : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/jpg";
if (context.Request.UrlReferrer != null && context.Request.UrlReferrer.Host.Equals(context.Request.Url.Host, StringComparison.InvariantCultureIgnoreCase))
context.Response.WriteFile(context.Server.MapPath("~/" + context.Request.QueryString["img"]));
else
context.Response.WriteFile(context.Server.MapPath("~/logo.gif"));
}
public bool IsReusable
{
get
{
return false;
}
}
}
}

表示如果来源不为空,并且来源的服务器和当前服务器一致,那就表示是正常访问,非盗链。正常访问文件内容。
否则就是盗链,返回网站LOGO。
你甚至可以做成随机返回正确的图片,随机返回错误图片,或者定时返回正确图片,定时返回错误图片。
然后就是图片的使用了,这时使用图片就不是直接<input type="image" src="svn_work.gif" />了,而是<input type="image" src="/Img.ashx?img=svn_work.gif" />,就是说通过img,ashx来读取图片。别人盗链的话要用下面代码:<input type="image" src="http://www.corange.cn/Img.ashx?img=svn_work.gif" />。

(0)

相关推荐

  • asp.net中gridview的查询、分页、编辑更新、删除的实例代码

    1.A,运行效果图 1.B,源代码/App_Data/sql-basic.sql 复制代码 代码如下: use mastergoif exists(select * from sysdatabases where name='db1')begin    drop database db1endgocreate database db1gouse db1go-- ================================-- ylb:1,类别表-- =====================

  • Asp.net+jquery+.ashx文件实现分页思路

    今天看到一个.java哥们写过的在页面直接请求数据列表的程序代码.它是实现选中客户联系人后,无刷新的弹出div罗列其它联系人列表的功能.忽然想到既然可以请求联系人列表,而且无刷新.那么取复杂的数据列表呢,后来想到了数据分页.我现在用了自己写的一个分页控件.但是效率有时候感觉不是很高,它是以 用户控件+存储过程+分页处理类 来实现分页的.但是无可避免的就碰到了刷新的问题即使分页很快,但是只要这"刷"的一下总是感觉很不爽.而且还要页面编译一遍,还要在服务端处理ViewState.以及其它的

  • asp.net 无刷新分页实例代码

    数据类代码: 复制代码 代码如下: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Data.SqlClient;using System.Collections;using System.Reflection; namespace DAL{    public  class UserManageClass    {  

  • AspNetPager+GridView实现分页的实例代码

    .框架是.NET Framework 4.0.一共为三个部分: 前台页面设计代码.前台页面程序代码.css样式.其中数据库连接操作用了DB类(连接语句),SQLHelper(微软的数据库操作类)效果图: 前台页面设计代码 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestWebSit

  • Jquery Ajax.ashx 高效分页实现代码

    以前的我,用惯了 UpdatePanel UpdateProgress 等控件,甚至到了滥用的程度,只是一味的追求无刷新,一边弄这 loading 图片 提示,这样貌似更美观,但是 感觉 更损失了性能, 而且有时候还破坏了网站的完整性. 但是学了Jquery之后,了解了 Jquery.ajax ,Jquery.get 等方法,从而学会了使用 webservice 和.ashx 文件,来与服务器交互. 这次的Jquery分页 是与 .ashx文件配合的. 建立三个.ashx,分别为PreviewH

  • asp.net中利用ashx实现图片防盗链代码

    GET /Img.ashx?img=svn_work.gif HTTP/1.1 Accept: */* Referer: http://www.svnhost.cn/ Accept-Language: zh-cn UA-CPU: x86 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727

  • asp.net中利用ashx实现图片防盗链的原理分析

    直接分析盗链原理:看下面用httpwatch截获的http发送的数据 GET /Img.ashx?img=svn_work.gif HTTP/1.1 Accept: */* Referer: http://www.jb51.net/ Accept-Language: zh-cn UA-CPU: x86 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET

  • ASP.net中实现基于UrlRewrite的防盗链功能

    在ASP.net中最快实现UrlRewrite的方法这篇文章中说了如何做UrlRewrite,那只是一个最简单的应用 其实利用UrlRewrite与IIS的设置我们可以实现简单而有效的防盗链功能. 假设你的站点有一个文件:web.rar,你希望只有具有某些特定域名的来源地址或是已经登陆的用户才能访问,这时就得用到防盗链功能,在ASP时代,我们需要借助第三方组件来完成这个效果,但是在ASP.net中我们可直接利用Context.RewritePath来实现了. 下载配置文件: 复制代码 代码如下:

  • ASP.NET中利用DataList实现图片无缝滚动 实例分享

    [html] 复制代码 代码如下: <div id="demo" style="overflow: hidden; width: 441px; border: 0px">         <table width="441" height="130" border="0" cellpadding="0" cellspacing="0" backgro

  • asp.net下结合HttpHandler实现图片防盗链

    复制代码 代码如下: #region IHttpHandler 成员 bool IHttpHandler.IsReusable { get { return true; } } void IHttpHandler.ProcessRequest(HttpContext context) { string FileName = context.Server.MapPath(context.Request.FilePath); if (context.Request.UrlReferrer.Host

  • CSS实现简单的图片防盗链代码

    实现方法很简单,在CSS中添加以下代码: img { filter:expression( this.不能去掉 ? "" : ( (!this.complete) ? "" : this.runtimeStyle.filter = ("progid:DXImageTransform.Microsoft.AlphaImageLoader(src=''" + this.src + "'')") + String(this.不能去掉

  • IIS图片防盗链和下载的解决方案

    在要启用Rewrite的IIS站点的Isapi上添加这个筛选器 筛选器名称Rewrite 可执行文件选择 c:\Rewrite\Rewrite.dll 即可以了 httpd.ini是配置文件 图片防盗链代码 复制代码 代码如下: [ISAPI_Rewrite] # 3600 = 1 hour CacheClockRate 3600 RepeatLimit 32 # Protect httpd.ini and httpd.parse.errors files # from accessing th

  • ASP.NET中利用WebClient上传图片到远程服务的方法

    一.客户端 1.页面 <form id="Form1" method="post" runat="server" enctype="multipart/form-data"> <input id="MyFile" type="file" runat="server" /> <br /> <br /> <asp:Bu

  • ASP.Net中利用CSS实现多界面的两种方法

    本文实例讲述了ASP.Net中利用CSS实现多界面的两种方法.分享给大家供大家参考.具体实现方法如下: 可以通过使页面动态加载不同CSS来实现多界面的效果: 方法一: 复制代码 代码如下: <%@page language="C#"%> <%@import namespace="System.Data"%> <script language="c#" runat="server"> publ

  • 使用php伪造referer的方法 利用referer防止图片盗链

    什么是HTTP Referer简言之,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理.比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站.Referer其实应该是英文单词Referrer,不过拼错的人太多了,所以编写标准的人也就将错就错了.我的问题我刚刚把feed阅读器改变为Grega

随机推荐