防止盗链:修订间差异

来自牛奶河Wiki
跳到导航 跳到搜索
无编辑摘要
无编辑摘要
 
(未显示同一用户的1个中间版本)
第16行: 第16行:
       return;
       return;
   }
   }
例外: 不过,HTTP_REFERER 是发送端请求包过来的数据,完全可以伪造,如:
例外:不过,HTTP_REFERER 是发送端请求包过来的数据,完全可以伪造,如:


在Privoxy的default.action中添加两行:<sup>[1]</sup>
在Privoxy的default.action中添加两行:<sup>[1]</sup>
第23行: 第23行:


.album.sina.com.cn
.album.sina.com.cn
'''又:既然外链可以伪造,那么网站内部完全可以指定一个特殊的字符串作为验证,比如网站是 mwbbs.tk,可以指定是 mwbbs-safe.tk,这样外链至多可以伪造已知的名称 mwbbs.tk,而无从知晓指定的特殊字符串。'''


=== 动态目录或文件名 ===
=== 动态目录或文件名 ===
第30行: 第32行:
   
   
   echo '<meta http-equiv="refresh" content="0;url=/res/'.$d5.'/'.$p.'/'.$f.'">';
   echo '<meta http-equiv="refresh" content="0;url=/res/'.$d5.'/'.$p.'/'.$f.'">';
上述 md5 的 hash,可以在日期基础上,增加固定特殊字符串,也就是所谓的加盐(salt)。


=== 记录访问 IP,超过阈值暂停服务 ===
=== 记录访问 IP,超过阈值暂停服务 ===

2023年1月18日 (三) 11:53的最新版本

防止盗链

请求来源验证

使用 HTTP-REFERER 验证可以取到申请访问的来源(直接输入地址是空)。

  // 来源验证
  $s_from = $_SERVER["HTTP_REFERER"];
  $s_from = explode("/",$s_from)[2];

  $flag = true;
  if (strstr($s_from, "mwbbs."))
     $flag = false;

  if ($flag)
  {
     echo "This resource can only be used in mwbbs.tk";
     return;
  }

例外:不过,HTTP_REFERER 是发送端请求包过来的数据,完全可以伪造,如:

在Privoxy的default.action中添加两行:[1]

{+hide-referrer{forge}}

.album.sina.com.cn

又:既然外链可以伪造,那么网站内部完全可以指定一个特殊的字符串作为验证,比如网站是 mwbbs.tk,可以指定是 mwbbs-safe.tk,这样外链至多可以伪造已知的名称 mwbbs.tk,而无从知晓指定的特殊字符串。

动态目录或文件名

  // md5: Prefix+yyyymmdd
  $d = 'Prefix'.date("Ymd");
  $d5 = md5($d);

  echo '<meta http-equiv="refresh" content="0;url=/res/'.$d5.'/'.$p.'/'.$f.'">';

上述 md5 的 hash,可以在日期基础上,增加固定特殊字符串,也就是所谓的加盐(salt)。

记录访问 IP,超过阈值暂停服务

  $s_ip_client = $_SERVER['REMOTE_ADDR'];

参考

  1. HTTP-REFERER伪造方法
  2. 8种网站防止盗链的方法
  3. 防盗链的原理以及实现