知识大全 解决图片被盗链接的问题?

Posted

篇首语:今日长缨在手,何时缚住苍龙。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 解决图片被盗链接的问题?相关的知识,希望对你有一定的参考价值。

   所有的image url都跟上密文 比如你在绑定页面image url时可以这么做 以下是MVC示例 其他的差不多

  ImageController

  string path= /Content/ ;

  string imgName = girl jpg ;

  long ticks=DateTime Now Ticks;

  //使用当前时间刻度作为待加密对象

  string encryptKey = ticks ToString();

  //使用自定义对称算法加密

  byte[] data = SymmetricEncryptionUtility

   EncryptData

  (

  encryptKey

  ShareData SymmetricKeyFile

  );

  //使加密后的数据转换成base 码

  string encryptedImgName = Convert ToBase String(data);

  string encryptedEncoding = HttpUtility UrlEncode

  (

  encryptedImgName

  );

  //将加密后的密文存放在共享数据中

  ShareData KeyCollections Add(encryptedImgName);

  ViewData[ imgUrl ] = string Format

  ( ?key= path imgName encryptedEncoding);

   自定义Handler 专用于处理图片请求 此handler做这么几件事

   获得图片请求的key 即上段代码中的encryptedEncoding 没有图片key 那就哪里来送回哪里去 (友好点 给个性感图片送过去 )

   应该所有key都经过对称算法加密 so 解密先

   判断请求是否来自本站 是本站流程进 否则进

   本站请求再做进一步筛选 查看ShareData中是否有包含此key (ShareData是自定义的 ) 存在图片的key那么清除ShareData中此key然后正确返回请求图片 不存在那么同步骤 一样送回去 (做ShareData判断是防止javascript 篡改request head信息)

   不是来自本站的请求 可以提供自己的策略 我这里做的是 天链接过期 (因为第一段代码中用时间刻度做加密 所以这里解密了很好判断)

  ImageHandler

  public void ProcessRequest(HttpContext context)

  

  HttpResponse response = context Response;

  HttpRequest request = context Request;

  string imgKey = request QueryString[ key ];

  byte[] data = Convert FromBase String(imgKey);

  string decryptedKey = SymmetricEncryptionUtility

   DecryptData

  (

  data

  ShareData SymmetricKeyFile

  );

  //如果没有图片密钥就返回

  if (imgKey == null) return;

  string imagePath = null;

  //检查请求是否来自外站

  if (request UrlReferrer != null)

  

  if (String Compare(

  request Url Host

  request UrlReferrer Host

  true

  CultureInfo InvariantCulture) == )

  

  if (!ShareData KeyCollections Contains(imgKey))

  return;

  imagePath = request PhysicalPath;

  if (!File Exists(imagePath))

  

  response StatusCode = ;

  return;

  

  

  

  else//不是本站 检查明文时间轴

  

  long ticks;

  if (long TryParse(decryptedKey out ticks))

  

  TimeSpan ts = new TimeSpan

  (

  DateTime Now Ticks ticks

  );

  //如果大于一个月

  if (ts TotalDays > )

  

  //输出链接过期

  return;

  

  

  

  //移除共享数据中key

  ShareData KeyCollections Remove(decryptedKey);

  response ContentType = image/

  + Path GetExtension(imagePath) ToLower();

  response WriteFile(imagePath);

  

  因为是自定义Handler注意在config中注册handler节点 至于配置节不知道什么意思 自己查查

  nfig

  <Handlers> <add verb= * path= * gif type=

   MvcApp Handler ImageHandler />

  <add verb= GET path= * jpg type= MvcApp Handler ImageHandler />

  </Handlers>

cha138/Article/program/net/201311/11636

相关参考

知识大全 自己电脑上QQ突然登不上了,360防毒扫描都没问题,帐号没被盗,重灌QQ也没用,求大家教教我怎么解决

自己电脑上QQ突然登不上了,360防毒扫描都没问题,帐号没被盗,重灌QQ也没用,求大家教教我怎么解决  以下文字资料是由(本站网www.cha138.com)小编为大家搜

知识大全 JSP显示图片问题时的如何解决

JSP显示图片问题时的如何解决  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  前提使用JSP显示

知识大全 改变图片链接的边框颜色

一般图片的边框为蓝色对于搭配您的站点很不方便看看下面的图片的边框色是不是让您兴奋啊!制作方法将下面的代码复制到<body>~</body>里<a#><imgs

知识大全 智锂狗系统能解决哪些行业问题

智锂狗系统能解决哪些行业问题?1、对电池进行预警管理,预防电池着火爆炸;2、对电池进行定位追踪,降低电池被盗发生;3、对电池健康状态进行评估,解决电池回收难的困境;4、后台提供大数据技术,提升监管服务

知识大全 win7 系统文件夹保存的图片显示不出缩略图,全部都是图标,你好 我想问下这个问题你是怎么解决的呢

win7系统文件夹保存的图片显示不出缩略图,全部都是图标,你好我想问下这个问题你是怎么解决的呢?解决办法:点击“组织”-“文件夹和搜索选项”-“查看”,看看“始终显示图标,从不显示缩略图”前是否有勾,

消费者丢失、被盗机动车销售发票该如何处理?

根据国家税务总局《关于消费者丢失机动车销售发票处理问题的批复》(国税函〔2006〕227号)规定,当消费者丢失机动车销售发票后,可采取重新补开机动车销售发票的方法解决。具体程序是,丢失机动车销售发票的

好友的QQ突然发来一个网站链接要求投票,最合理的做法是()

好友的QQ突然发来一个网站链接要求投票,最合理的做法是()。A、因为是好友信息,直接打开链接投票B、可能是好友QQ被盗,发来的是恶意链接,先通过手机跟朋友确认链接无异常后,再酌情考虑是否投票C、不参与

好友的QQ突然发来一个网站链接要求投票,最合理的做法是()

好友的QQ突然发来一个网站链接要求投票,最合理的做法是()。A、因为是好友信息,直接打开链接投票B、可能是好友QQ被盗,发来的是恶意链接,先通过手机跟朋友确认链接无异常后,再酌情考虑是否投票C、不参与

知识大全 phpMyAdmin链接MySql错误 个人解决方案

phpMyAdmin链接MySql错误个人解决方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!装

照片通透度问题,对焦正常,拍摄正常,但是图片出来总感觉似乎空

对焦和拍摄仅仅是一部分摄影的技巧,画面看起来不通透其实最主要的原因是画面反差不够。解决的方法有二:  1:利用数码后期加大反差,常用的有调整曲线,直接加反差,叠加底片和覆盖模式,以大直径锐华等若干方法