当前位置:  编程技术>.net/c#/asp.net

asp.net使用ashx实现图片防盗链的方法

    来源: 互联网  发布时间:2014-08-30

    本文导语:  首先,了解下盗链原理: 看下面用httpwatch截获的http发送的数据 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...

首先,了解下盗链原理:
看下面用httpwatch截获的http发送的数据
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
{
///
/// $codebehindclassname$ 的摘要说明
///
[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。
你甚至可以做成随机返回正确的图片,随机返回错误图片,或者定时返回正确图片,定时返回错误图片。
然后就是图片的使用了,这时使用图片就不是直接了,而是,就是说通过img,ashx来读取图片。

防止别人盗链的示例:
 

代码示例:

    
 
 

您可能感兴趣的文章:

  • ASP.net中实现基于UrlRewrite的防盗链功能
  • 在ASP中可以轻易实现,不知道在JSP中能否实现?
  • Linux平台下哪种方法实现ASP好?
  • 求解!Java如何能在多个applet之间实现类似asp的session类!
  • 调试jsp的时如何实现像asp中的response.end的效果
  • 怎么用能让asp实现统计在线人数的功能。在线等待!!!帮忙送分!
  • 在jsp 中如何实现像asp 中的页面弹出式的菜单
  • asp.net 参数不同共用一个页面的实现方法
  • Asp.net防止重复提交的实现方法
  • 用linux做服务器运行ASP.net网站,请问具体怎样实现??
  • ASP.NET MVC3 实现全站重定向的简单方法
  • 在jsp中如何实现与asp中的Request.ServerVariables("SCRIPT_NAME")同等的功能?
  • Jsp中怎么实现类似ASP中split函数的功能?
  • 如何实现ASP中类似Global.asa的功能???
  • jsp中如何实现asp中的response.end,或php中的exit()功能?
  • java实现的asp服务器 OpenASP
  • ASP的功能在JSP中怎么实现呀?谢谢!!!
  • asp去掉html,保留img br p div的正则实现代码
  • asp.net 实现php的md5()函数功能
  • asp.net session实现用户登录的疑问
  • 怎样将Tomcat嵌入IIS中,实现用ASP与JSP都用IIS来做!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • asp.net UrlEncode对应asp urlencode的处理方法
  • asp.net post方法中参数取不出来的解决方法
  • asp.net 禁用viewstate(web.config中配置)的方法
  • c#(asp.net)接收存储过程返回值的方法
  • asp.net 超时设置的方法介绍
  • ASP.NET使用Subtract方法获取两个日期之间的天数
  • asp.net获取url地址的方法
  • iis8.5显示ASP的详细错误信息500 内部服务器错误解决方法
  • asp.net Control控件常用的属性与方法
  • ASP.NET 回发密码框清空问题处理方法
  • 重新注册asp.net 2.0的方法
  • asp.net防止后退与重复提交表单的简单方法
  • asp.net Session丢失的解决方法
  • asp.net ajax时用alert弹出对话框与验证控件冲突的解决方法
  • IIS7配置ASP详细错误信息发送到浏览器显示的方法
  • iis支持asp.net4.0的注册命令使用方法
  • asp.net动态添加非标准html控件的方法
  • 请问在jsp中有没有类似于asp中的server.Mappath获得绝对路径的方法啊?
  • asp.net 文件下载的通用方法
  • 请问ASP转JSP大概要多长时间?有快速入门方法吗?
  • ASP.NET之 Ajax相关知识介绍及组件图
  • 我想了解一些关于Java怎样与Asp或Asp.net结合方面在未来发展方向的问题?
  • c#/ASP.NET操作cookie(读写)代码示例
  • asp.net实例 定义和使用asp:AccessDataSource
  • win2008 r2 服务器环境配置(FTP/ASP/ASP.Net/PHP)
  • asp与asp.net的session共享
  • 如何在unix下发布asp?
  • 怎么让Apache支持Asp?
  • ??谁能把ASP代码改为JSP的
  • ASP和ASP.Net共享Session解决办法
  • 通过socket和asp打交道


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3