因为图片是另一台服务器,是linux,用的是tomcat服务器,web服务器当然是IIS6了,现在要做防盗链,就是防止人家直接输入图片服务器的地址或者直接引用!我应该在我的IIS服务器上做手脚,还是要LUNUX服务器上做手脚呢! 刚开始想的是在linux上,可是linux不大会,没有很在行的linux服务器管理员!请问这个应该怎么做,如果是在.net程序里做,应该怎么做呢!我用过网上的用HttpHandler来处理的类,然后在web.config里配置Httphandler,再在IIS里做扩展名映射,可是好像不起作用,不知道是不是我的方法不对,望知道的大大们帮帮忙,分不够可以再加!

解决方案 »

  1.   

    提供一种方法,,,,把图片存到数据库里,,,数据库是可以存放图片的,有个image字段类型,这样可以防盗,读取的时候比较麻烦,,要把图片先放到一个页面http://xxxx.jpg    再来引用这个页,说错请纠正我  
      

  2.   

    因为最终用户浏览器要和linux服务器联系取图片,所以你只能在图片服务器上想办法。linux不熟悉,帮不了你。要是windows服务器,我有办法
      

  3.   

    通过tommcat设置请求的来源,如只让你的iis服务器可以访问你的图片服务器
    另外可以通过映射,通过假地址像这个http://topic.csdn.net/u/20080426/13/0cc8c29d-3417-4550-890a-c8c480791f75.html
    HttpHandler这个只可以处理请求你iis服务器资源的东西
      

  4.   

    iis这边用httphandler判断一下referer或者cookie判断图片请求是不是来自你自己网站的用户,
    如果是,加一个加密参数后重定向至tomcat那边的php/jsp页的url,
    tomcat那边收到重定向来的请求后,判断加密的参数是否是两个服务器之间约定的加密结果,
    如果是,则发送图片数据(不要重定向至图片URL,直接在php/jsp里用字节流发送图片)。
      

  5.   

    上接13楼,
    例如:1, 设置一个约定的密码,假如为"abcdefg"
    1, 用户请求为http://xxxxxxxiis.com/img.ashx?filename=233.jpg
    2, img.ashx收到后判断referer或cookie,如果非本站来源则Response.Write("贼来了"),如果否则转至#3
    3, 生成一个验证串ac=md5(filename+"abcdefg"),然后Response.Redirect("http://xxxxxxxtomcat.com/img.jsp?ac=d039e34664c0ab9a07220afae77f1ed4&filename=233.jpg")4,Tomcat的img.jsp收到来自#3的请求,检查参数中的filename+"abcdefg"的md5是否是参数中的ac值,如果是则二进制发送图片数据,如果否就什么都不发送。
    反正整个过程中别出现图片文件的完整URL路径,出现文件名都没关系,约定的密码也不一定是固定的方式,只要能被两个服务器上的这两个页面程序所理解就行。
      

  6.   

    这个只能在LINUX上做动作了,在.NET里没办法的, 人家直接输入图片服务器的地址,这个跟IIS无关的,所以要想一个在tomcat里的方法了,不知道有人 会不
      

  7.   


    当然是要linux上弄啦,你的图片都是在linux里的,如果你的IIS服务器的话就输出图片,如果不是你的服务器的话就不输出图片.
      

  8.   

    在用户访问页面时,写个临时cookie给它。请求图片时,有cookie就给,没有cookie就不显示。用IHttpModule来做吧。
      

  9.   

    你的图片请求需要身份验证吗?如果需要的化,直接Form验证就可以拒绝匿名用户了。
    另外好像看过 asp.net防被盗链的第三方软件