小记图片防盗链

简介:

刚被网友问了一下说自己站图片被别人盗了,想加防盗链,故此,写了下Demo:

 

步骤很简单:

1:用IHttpHandler来处理图片请求
2:对请求来源和来源IP进行判断
3:分支返回图片

 

 

 

下面实战示例:

1:新建web站点项目:ImageLink

2:再建类库项目:ImageLinkClass

3:类库添加类:ImageLinkFilter

4:web站点添加到类库项目的引用

 

此时结果如下图:

 

上面多了一个文件夹Images和里面两张测试用的图片。

 

5:ImageLinkFilter类继承IHttpHandler接口,并实现接口,代码如下

复制代码
ExpandedBlockStart.gif
     public   class  ImageLinkFilter:IHttpHandler
    {
        
#region  IHttpHandler 成员

        
public   bool  IsReusable
        {
            
get
            {
                
return   true ;
            }
        }

        
public   void  ProcessRequest(HttpContext context)
        {
            Uri u 
=  context.Request.UrlReferrer; // 访问来源地址
             string  ip  =  context.Request.UserHostAddress; // 访问来源IP
             string  serverHost  =  context.Request.Url.Host; // 当前访问主机地址
            
            
string  localIP = System.Configuration.ConfigurationManager.AppSettings[ " LocalIP " ];
            
if  (u  ==   null   ||  u.Host.ToLower()  !=  serverHost.ToLower()  ||  ip  !=  localIP)
            {
                context.Response.WriteFile(
" ~/Images/passby.jpg " );
            }
            
else
            {
                context.Response.WriteFile(context.Request.PhysicalPath);
            }
        }

        
#endregion
    }
复制代码

 

代码很简洁了,本地IP写在web.config文件如:

< appSettings >
     
< add  key ="LocalIP"  value ="127.0.0.1" />
</ appSettings >

 

 

6:配置文件里添加对本类的引用

复制代码
< system.web >
<!--   省略其它   -->
   
< httpHandlers >
      
< add  verb ="*"  path ="*.jpg,*.jpeg"  type ="ImageLinkClass.ImageLinkFilter" />
   
</ httpHandlers >
</ system.web >
复制代码

 

 

7:按F5进行测试

测试1:通过本地页面Default.aspx测试图片

< form  id ="form1"  runat ="server" >
    
< img  src ="Images/chess.jpg"   />
</ form >

得出结果正常访问图片结果:

原因:因为来源页不为Null,地址也对,同时IP也一样。

你可以改一下IP,看看结果。

 

测试2:直接访问图片地址

得出结果是:

原因:直接访问图片时,来源页是Null,所以被转向了。

 

按理,以上却是OK了,然而部署到IIS时,一切效果都消失了。

 

8:IIS部署

我们修改一下项目属性页的配置:服务器选项,用本机IIS来调试:修改如下图:

 

接着F5调试,我们发现ImageLinkFilter内的断点无效,图片也被正常访问

 

其实,这里需要添加一下对IIS的映射,让aspnet_isapi.dll能处理下图片类型:

 

9:添加IIS映射

A:IIS-》网站属性—》主目录-》配置

 

 

 

B:在映射-》点添加[可添加多个]

可执行文件路径为:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll

扩展名这里注意了:.jpg [我一直打成*.jpg,结果那个确定按钮一直不可用]

 

 

10:最终测试

加完映射之后,我们再F5运行,发现断点执行了,测试效果如下:

结果1:通过页面访问,转向成功!

 

 

结果2:直接访问图片路径,转身成功!

 

 

OK,本文打完收工!最后提供示例下载:点击下载

 

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2010/08/26/1809169.html

相关文章
|
6月前
|
Docker 容器
80 # 图片防盗链
80 # 图片防盗链
16 0
|
11月前
|
编解码 开发工具 Android开发
.9图片的那点事儿
.9图片的那点事儿
145 0
|
弹性计算 负载均衡 网络协议
源站保护
源站保护
148 0
源站保护
|
Linux 数据安全/隐私保护 Windows
Stegosuite,图片隐写术
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396511 ...
1345 0
|
存储 安全 对象存储
防盗链使用过程中遇到的问题
防盗链使用过程中遇到的问题
172 0
|
Java JavaScript 前端开发
解决图片 防盗链
js版解决方案 var url = 'https://mmbiz.qpic.cn/mmbiz_jpg/TAoksPVlXMI7dQPxiaUbAHvyJ19iaG9b2Ueh53iaqTsn6F8O3m63zcBibgNpujM1HNeCKX99vOo...
1788 0
|
缓存 Android开发
图片
●图片加载,缓存,处理 Picasso (一个强大的图片下载与缓存的库) Fresco (一个用于管理图像和他们使用的内存的库) Glide (一个图片加载和缓存的库,使用的App有:网易新闻) Picasso-transformations (...
1337 0