English
 电子信箱
 加入收藏

  威盾防火墙 >> 新闻中心 >> 威盾新闻 >> 防止图片盗链和资源恶意下载

 

防止图片盗链和资源恶意下载

威盾防火墙 2014-12-17

 

这里首先要提一下,IIS是怎么怎么处理http请求的

当服务器接收到一个 Http请求的时候,IIS 首先需要决定如何去处理这个请求(服务器处理一个.htm页面和一个.aspx页面肯定是不一样)。那IIS依据什么去处理呢?―― 根据文件的后缀名。

服务器获取所请求的页面(也可以是文件,比如 jimmy.jpg)的后缀名以后,接下来会在服务器端寻找可以处理这类后缀名的应用程序,如果IIS找不到可以处理此类文件的应用程序(比如.aspx就是C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll这个控制,就是.net运行时),并且这个文件也没有受到服务器端的保护(一个受保护的例子就是 App_Code中的文件,或者webconfig,一个不受保护的例子就是你的js脚本,你的图片资源文件夹),那么IIS将直接把这个文件返还给客户端。

 这里,我们看到了为什么我们无法防止盗链或者资源恶意下载,因为默认这些资源不在.net程序控制之下,当客户端请求这些资源是,服务器IIS会把这些资源直接返回给客户端。

接下来的核心目的,就是怎么能让这些资源在程序控制范围之内呢?

有两种方案

一。

1.扩展IIS配置,加入扩展名.jpg,gif等受C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll这个控制。

2.在程序里扩展httpmodule或者httphander或者Global,(如果在httphander里处理,还需要在webconfig的hander节点中定义处理.jpg,gif等httpmodule是应用程序级的,httphander是每个http请求级的)

一般为判断主机头,然后如果不是你的主机头,那么为盗链,

具体怎么做,自己定了(如返回给盗链信息,水印等)

二。如果不想控制web服务器,那么显示图片的时候就不能轻易的直接输出资源地址了,需要把图片和资源先用数据流加载,再返回到客户端,这样因为输出的时候是程序控制的,所以也是可控制的(可以用aspx或者ashx文件做成文件路径输出图片)

1.图片或资源存在数据库,以流的形式输出,

2.和上面一样,只是存在文件夹里,输出的时候加载成流,输出

3.如果下载的时候不转成流,下载的话也可以先加一个button按钮 提交服务器,隐藏或者动态生成资源链接,但是图片不能这么做.因为图片是默认显示的

然后再说一下图片防下载的解决方案

防止图片下载,

1.水印签名(也可以做为防盗链)

2.js或者flash客户端什么的屏蔽

3.把图片切成N块,(比如1000块,动态生成1000个Image拼一起,拆张和他干,我就这么做:),强烈推荐)

注:如果用切图就没办法了,毕竟是客户端,不过防盗链,防下载并不是为了个人用户开发的,是防止一些网络小偷程序等恶意软件的。

 

文件下载也是一样,文件存在数据库或者文件夹里,把文件夹的权限设为不可访问,然后用文件流输出

 

        string sFileName = Server.MapPath("1.rar");
        FileStream fileStream = new FileStream(sFileName, FileMode.Open);
        long fileSize = fileStream.Length;
        byte[] fileBuffer = new byte[fileSize];
        fileStream.Read(fileBuffer, 0, (int)fileSize);
        //如果不写fileStream.Close()语句,用户在下载过程中选择取消,将不能再次下载
        fileStream.Close();

        Context.Response.ContentType = "application/octet-stream";
        Context.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("1.rar"//隐藏路径, Encoding.UTF8));
        Context.Response.AddHeader("Content-Length", fileSize.ToString());

        Context.Response.BinaryWrite(fileBuffer);
        Context.Response.End();
        Context.Response.Close();

 


相关内容: 最新内容:
IIS防盗链[2014-12-16]
php防止恶意刷新与刷票的方法[2014-12-12]
PHP防盗链技术[2014-12-11]
防盗链的一些方法[2014-12-08]
利用IIS下的httpd.ini实现图片和文件的防盗链[2014-12-08]
iis安全防盗链设置[2014-12-08]
apache2.0.54防止盗连接详细配置[2014-12-17]
Apache 服务器Log分析应用实例[2014-12-17]
Debian的php和apache安全设置[2014-12-17]
如何抵御身份盗窃[2014-12-17]
IIS与SQL服务器安全加固[2014-12-17]
解决读取IIS服务器绝对路径错误的方法[2014-12-17]