做站的朋友们,不知道你们知否有过这种经历。你天天熬夜做内容,深更半夜搞优化。突然一个臭流氓,直接反代你的网站,除了网站名,其它的一模一样的网站。你费尽千幸万苦的东西,别人直接拿去套用,一边偷你内容还要压榨你那点可怜的服务器资源,这个你能忍?
反代的危害
- 首先会占用服务器资源、CDN资源、流量费,你花钱让别人收益,你能忍?
- 搜索引擎针对有和会你网站一模一样的内容,有降低降低公信力、降权等风险;
- 你的网站挂的Adsense、百度联盟等广告,如果遇到而已点击,也是有风险的。
防止反代的有效策略
1.从服务器日志中,找出反代是通过哪种方式反代你的网站,然后通过下列「屏蔽反代」方法屏蔽;
2.举报给 谷歌安全浏览 和 百度举报平台 。搜索引擎判断该内容后,会针对站点降权甚至会把镜像站点从搜索结果中删除。
屏蔽恶意反代方法总结
屏蔽方法很多,可以在系统层面利用防火墙屏蔽,可以在服务上屏蔽,也可以在内容上屏蔽,没有必要都配置一遍,选择合适的即可。
1、防火墙配置
如果代理服务器是直接连接我们服务器,可以在防火墙上禁止该 IP 连接,以 CentOS 7 为例:
[root@UN ~]# firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address="1.1.1.1" drop' --permanent
[root@UN ~]# firewall-cmd --reload
如果代理服务器更换了 IP,我们就要再配置防火墙,而且若代理服务器使用了 CDN 来反代,那么这种方法将不适用,除非你确定自己也不会用 CDN。
2、Nginx 配置
在站点配置文件中新增一段:
server {
......
if ($host !~ 自己的网站地址) {
return 444;
}
......
}
代理服务器访问直接不回应,若要跳转到自己的网站,可以把 444 改成网站链接,此方法最简单彻底。
3、.htaccess 屏蔽
.htaccess
RewriteEngine On
RewriteBase /
php_value auto_append_file proxy.php
proxy.php
<?php
$f = getenv("HTTP_X_FORWARDED_FOR");
$server = getenv("HTTP_HOST");
if (($f!="")&&($server!="自己的网站地址")&&($server!="自己的网站地址")){
echo '本服务器禁止反向代理!';
}
?>
4、JavaScript 屏蔽
直接在网页中添加:
<script type="text/javascript">
if (document.domain != '自己的网站地址' && document.domain != '自己的网站地址'){
window.location.href='https://自己的网站地址';
}
</script>
如果是反代者使用了 iframe,那么应该再加一段判断:
<script type="text/javascript">
if (top.location != self.location) {
top.location=self.location;
}
</script>
或者
<script type="text/javascript">
var url=window.location.href;
if(window!=parent)
parent.navigate(url);
</script>
厉害的反代者会直接把 js 替换掉,所以这种方法不能完美屏蔽。
5、PHP 屏蔽
第一种
<?php
if($_SERVER['SERVER_NAME'] != 'chun-ni.fun' ||$_SERVER['SERVER_NAME'] != 'chun-ni.fun' )
{
exit('非法反向代理访问');
}
?>
第二种
$proxy_rs = $this -> proxy_filter();
if( $proxy_rs != '自己的网站地址' || $proxy_rs != '自己的网站地址' )
{
echo '非法反向代理访问';
header('Location: https://自己的网站地址');
exit;
}
public function proxy_filter()
{
$svrUrl = 'http://' . $_SERVER['SERVER_NAME'].$_SERVER["PHP_SELF"];
if (!empty($_SERVER["QUERY_STRING"]))
{
$svrUrl .= "?".$_SERVER["QUERY_STRING"];
}
return $svrUrl;
return $_SERVER['SERVER_NAME'];
}
6、refer 屏蔽
此方法针对 301 跳转,Nginx 下配置:
server{
.....
if ($http_referer ~* (.自己的网站地址)){
return 444;
}
......
}
由于我网站的使用的Nginx,其它的方法未验证其。方法收集于互联网,仅供参考。如已失效,烦请反馈。
作者 | 王耍耍