当前位置:编程学习 > C#/ASP.NET >>

C# 图片防盗链怎么做啊?

现在我的网站上的图片已被很多人调用了.怎么样才可以防盗链啊.
要求:1.不可以改图片的目录.
     2.不能改IIS设置.
     3.不用什么CSS技术隐藏图片实际地址.因为地址他们已知道了.
     请高手指点下啊
--------------------编程问答-------------------- 我也想知道。 --------------------编程问答-------------------- 确实,不用像楼主所说的那三点。
这个时候需要对httphandler编程,分析传入的请求是否来自于你的网站就可以了,很容易实现的。
请楼主参考htthandler编程的实例,很好找的,讲这个技术的时候都是用这个功能来做实例。 --------------------编程问答-------------------- 楼上说的有道理!  支持 --------------------编程问答-------------------- Http Handler 介绍
http://www.tracefact.net/Asp-Net-Architecture/Introduction-to-Http-Handler.aspx --------------------编程问答-------------------- 用htthandler 不用改动IIS吧.因为是虚拟空间,所以什么都改不了的. --------------------编程问答-------------------- C# 图片防盗链怎么做,这里有介绍的。
http://blog.csdn.net/farawayplace613/archive/2008/10/22/3126456.aspx --------------------编程问答-------------------- 网上有例子的!! --------------------编程问答-------------------- 最简单的是判断Referer,这不是万全之策,因为有些网站可能会先取得你的URL,然后HTTP加Referer头发送请求。
不过大部分网站应该都能防到,相信这是最省钱省事的做法了! --------------------编程问答-------------------- 要是我就不防盗链,直接在图片上加上我的网址,呵呵! --------------------编程问答-------------------- 弄个水印,帮你宣传 --------------------编程问答-------------------- 图片上贴个芙蓉姐姐 --------------------编程问答--------------------
引用 11 楼 enihs 的回复:
图片上贴个芙蓉姐姐


哈哈..就这样办 --------------------编程问答-------------------- 学习! --------------------编程问答-------------------- 学习加帮顶!!!
--------------------编程问答-------------------- 现在通常的做法是使用HttpHandler加水印


周公的Blog里有
http://blog.csdn.net/zhoufoxcn/archive/2008/01/10/2033530.aspx --------------------编程问答-------------------- 关注 --------------------编程问答-------------------- 图片还是用上水印,这样完全可以确定图片是否来自你的网站 --------------------编程问答--------------------
引用 10 楼 xxaacc 的回复:
弄个水印,帮你宣传

支持 --------------------编程问答-------------------- 确实,不用像楼主所说的那三点。 
这个时候需要对httphandler编程,分析传入的请求是否来自于你的网站就可以了,很容易实现的。 
请楼主参考htthandler编程的实例,很好找的,讲这个技术的时候都是用这个功能来做实例。 --------------------编程问答-------------------- htthandler 应该不能解决问题吧
iis不会把jpg后缀名的地址交给aspnet_isapi.dll处理的
如果是vs调试的话可能成功
但是如果在iis上发布的话可能就不起作用 --------------------编程问答-------------------- 个人还是觉得加水印好。要是防盗链,最简单的就是判断是否是从你的网站访问的详细页,并且在访问的时候加个session什么的。大概原理就是把外来网站的请求都屏蔽掉~~大概是吧,本人还是菜鸟,不对的请见谅 --------------------编程问答--------------------

//1 写一个继承自IHttpHandler的类,并生成DLL;
using System;
using System.Web;
using System.Collections.Generic;
using System.Text;

namespace ImgProtect
{
    public class ImgProtectHadler:IHttpHandler
    {
        public bool IsReusable
        {
            get
            {
                return true;
            }
        }
        public void ProcessRequest(HttpContext context)
        {
            string path = context.Request.PhysicalPath;
            string serverHost = context.Request.Url.Host;
            Uri u = context.Request.UrlReferrer;
            if (u == null || u.Host.ToLower() != serverHost.ToLower())
            {
                context.Response.WriteFile("~/Forbidden.gif");
            }
            else
            {
                context.Response.WriteFile(path);
            }
        }

    }
}
//2 在网站中引用 该DLL;

//3 在Web.config中加入

<httpHandlers>
   <add verb="*" path="*.jpg,*.jpeg,*.gif,*.png,*.bmp" type="ImgProtect.ImgProtectHadler"/>
</httpHandlers>
--------------------编程问答-------------------- LS的Code可以实现 --------------------编程问答-------------------- 学习一下! --------------------编程问答-------------------- 好帖,顶一下!! --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 你加密吧 --------------------编程问答-------------------- up --------------------编程问答-------------------- 帮顶 --------------------编程问答-------------------- 唉,还是没有解决办法

就象是太平洋电脑网的那种.你可以看到他的图片,但就是在网站上不能调用.
有没有高手来讲解一下啊 --------------------编程问答-------------------- 防盗链一般自己的服务器好做
iis解析的时候都交给一个程序处理就行了
想楼主这样的要求不好说
我觉得水印是最好的办法了
htthandler应该实现不了
用vs调试的时候是可以的
但是用 iis就不行了 --------------------编程问答-------------------- 那你也只有加水印 来完成了 --------------------编程问答-------------------- Mark。 --------------------编程问答-------------------- 看来是没办法解决了 --------------------编程问答-------------------- 周公 强帖 留名... --------------------编程问答--------------------
引用 10 楼 xxaacc 的回复:
弄个水印,帮你宣传

同意 ,免费帮你做广告 --------------------编程问答-------------------- 加水印不错 --------------------编程问答-------------------- 强大的周公 --------------------编程问答-------------------- 使用httpHandle来实现,对图片文件的请求做专门的处理
第一步:创建一个类,继承自IHttpHandler,代码如下
using System;
using System.Web;

namespace CustomHandler{
    public class JpgHandler : IHttpHandler{
       public void ProcessRequest(HttpContext context){
           // 获取文件服务器端物理路径
           string FileName = context.Server.MapPath(context.Request.FilePath);
           // 如果UrlReferrer为空,则显示一张默认的禁止盗链的图片
           if (context.Request.UrlReferrer.Host == null){
              context.Response.ContentType = "image/JPEG";
              context.Response.WriteFile("/error.jpg");
           }else{
              // 如果 UrlReferrer中不包含自己站点主机域名,则显示一张默认的禁止盗链的图片
             if (context.Request.UrlReferrer.Host.IndexOf("yourdomain.com") > 0){
                  context.Response.ContentType = "image/JPEG";
                  context.Response.WriteFile(FileName);
              }else{
                  context.Response.ContentType = "image/JPEG";
                  context.Response.WriteFile("/error.jpg");
              }
           }
       }

       public bool IsReusable{
           get{ return true; }
       }
    }
}


第二步:编译成DLL
csc /t:library CustomHandler.cs
第三步:添加编译好的DLL引用到当前站点的bin文件夹下
第四步:在Web.Config 中注册这个Handler
<system.web>
    <httpHandlers>
      <add path="*.jpg,*.jpeg,*.gif,*.png,*.bmp" verb="*" type="CustomHandler.JpgHandler,CustomHandler" />
    </httpHandlers>
 </system.web>

//verb指的是请求此文件的方式,可以是post或get,用*代表所有访问方式。CustomHandler.JpgHandler表示命名空间和类名,CustomHandler表示程序集名。


--------------------编程问答-------------------- 楼上的用httphandler就可以,支持图片加水印 --------------------编程问答-------------------- 不知道能不能回答,两年了

可以把图片地址写成这样

/image.aspx?imgId=1
这样可以不用改配置,做和HttpHandler一样的功能 --------------------编程问答-------------------- 加个水印不就可以了吗? --------------------编程问答-------------------- 加水印。。。 --------------------编程问答-------------------- 关注ing --------------------编程问答-------------------- 好贴,学习了 --------------------编程问答-------------------- 学习一下。 --------------------编程问答-------------------- 禁止复印粘贴。 --------------------编程问答--------------------
引用 12 楼 heaven_feather 的回复:
引用 11 楼 enihs 的回复:
图片上贴个芙蓉姐姐


哈哈..就这样办

哈哈..就这样办
--------------------编程问答-------------------- ISAPI rewrite中文手册2008-08-26 12:51我们在进行网站搜索引擎优化(SEO)或在服务器进行防盗链设置的时候,
可能会用到ISAPI rewrite,下面是ISAPI rewrite的手册,翻译成中文。

.....

假设我们在http://www.mysite.com/下有些页面有一些内联 GIF图片很好,他人可以不直接协商通过盗链到他们的页面上,我们不喜欢这样因为加大了服务器流量
当我们不能100%保护图片,我们至少可以在浏览器发送一个HTTP Referer header的地方限制这种情况
[ISAPI_Rewrite]
RewriteCond Host: (.+)
RewriteCond Referer: (?!http://\1.*).*
RewriteRule .*\.(?:gif|jpg|png) /block.gif [I,O] --------------------编程问答-------------------- 学习!!!!!!!!!!! --------------------编程问答-------------------- 不链接到实际图片,通过一个页面判断请求页面的域。如果不对就不给他 --------------------编程问答-------------------- 将图片通过自定义组件显示,组件中图片不能下载就可以
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,