防止盗链:修订间差异
跳到导航
跳到搜索
无编辑摘要 |
小无编辑摘要 |
||
(未显示同一用户的1个中间版本) | |||
第16行: | 第16行: | ||
return; | return; | ||
} | } | ||
例外:不过,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'];