asp.net中利用ashx实现图片防盗链代码
直接分析盗链原理:看下面用httpwatch截获的http发送的数据
GET /Img.ashx?img=svn_work.gif HTTP/1.1
Accept: */*
Referer: /
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; CLR 1.1.4322; CLR 2.0.50727; CLR 3.0.04506.648; CLR 3.5.21022; CIBA)
Host:
Connection: Keep-Alive
该数据包表示请求/Img.ashx?img=svn_work.gif文件。我们可以看到Referer表示上一页请求页面地址,也就是文件来源。Host表示当前请求的主机地址。
下面是一个盗链的数据包
GET /Img.ashx?img=svn_work.gif HTTP/1.1
Accept: */*
Referer:
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; CLR 1.1.4322; CLR 2.0.50727; CLR 3.0.04506.648; CLR 3.5.21022; CIBA)
Host:
Connection: Keep-Alive
我们可以看到,上面两个数据,表示对于同一个文件:/Img.ashx?img=svn_work.gif的'请求过程,这里的不同就是Referer,也就是都是请求同一个文件,但是请求的来源是不同的。因此我们可以在程序里判断是否是来源于当前服务器,来判断是否是盗链。明白原理以后,实现防盗链就非常简单了。下面以图片防盗链来实现一个演示。中添加一个文件,然后后台代码如下:
复制代码 代码如下:
using System;
using ections;
using ;
using ;
using ices;
using ocols;
namespace GetImage
{
///
/// $codebehindclassname$ 的摘要说明
///
[WebService(Namespace = "")]
[WebServiceBinding(ConformsTo = cProfile1_1)]
public class Img : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
entType = "image/jpg";
if (eferrer != null && ls(, 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。
你甚至可以做成随机返回正确的图片,随机返回错误图片,或者定时返回正确图片,定时返回错误图片。
然后就是图片的使用了,这时使用图片就不是直接了,而是,就是说通过img,ashx来读取图片。别人盗链的话要用代码。
-
Dreamweaver输入的文本字体怎样加粗
Dreamweaver输入的文本字体怎么加粗?Dreamweaver中想要加粗输入的文本,该怎么加粗呢?这都是最基础的教程,很简单,需要的朋友可以参考下,下面就跟随小编一起来看看吧!Dreamweaver怎么给字体加粗,下面我们就来看看详细的.教程。1、打开我的软件2、文件新建一个3、新建...
-
如何理解Javascript的caller,callee,call,apply区别
在提到上述的概念之前,首先想说说javascript中函数的隐含参数:argumentsarguments该对象代表正在执行的函数和调用它的函数的参数。[function.]arguments[n]参数function:选项。当前正在执行的Function对象的名字。n:选项。要传递给Function对象的从0开始的参数值...
-
php程序员的简历模板
日子如同白驹过隙,新一轮的招聘又在朝我们招手,这时一份好的简历可以起到很好的.作用哦。那么如何写简历才简练、明确呢?以下是小编收集整理的php程序员的简历模板,希望能够帮助到大家。基本简历姓名:黄先生国籍:中国现在所在地:广州民族:汉族户口所在地:潮州身材:170cm...
-
学习JavaScript的7个理由
为什么要学习JavaScript?学习JavaScript对我们的工作有什么帮助么?下面YJBYS小编为大家讲解!需求我之所以这样说的主要原因是,随着JavaScript的日渐成熟,以及方案变得越来越可行,我们对JavaScript程序员的需求正在持续增长。JavaScript在需求比例上已经超过了C#,仅...
相关文章
- MS SQL Server Management Studio Express安装图文具体步骤
- The truth about money and happiness高中英语作文
- Is a Test of Spoken English Necessary英语四级作文
- Don’t Take the Age As an Excuse为题目的作文
- 初中英语作文My Strengths and Weaknesses
- 用canvas就可以实现图片的滤镜转化代码实现
- 防盗链接ASP函数实现代码
- WEALTH AND HAPPINESS高中英语作文
- How to Enhance the Sense of Happiness英语四级作文
- 关于ASP.NET使用JavaScript显示信息提示窗口实现原理及代码