如何阻止网站被恶意反向代理访问(防网站镜像)


Posted in PHP onMarch 18, 2014

什么是反向代理?

先说说正向代理的概念:

正向代理,也就是传说中的代理,他的工作原理就像一个跳板。简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器。这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。

结论就是,正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

那么反向代理的概念呢?

比如用户访问 http://www.nowamagic.net/librarys/veda 这个页面,但www.nowamagic.net实际上并不存在这个页面,他是偷偷从另外一台服务器上取回来,然后作为自己的内容吐给用户。

但用户并不知情,这很正常,用户一般都很笨。这里所提到的 www.nowamagic.net 这个域名对应的服务器就设置了反向代理功能。

结论就是反向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理 的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。

恶意反向代理的危害

网站被恶意反向代理有什么危害呢?这里列举一下:

•首先肯定会占用服务器资源,网站打开速度受影响。
•其次,别人通过代理盗用你的网站数据,对用户与不是那么智能的搜索引擎而言,相当于建了一个与你一模一样的站点,那么很有可能你的站点会进搜索引擎沙箱,甚至被降权。
•如果被恶意代理的页面,还挂有你的联盟广告(比如Adsense),这就十分危险了,如果有人点击了上面的广告,很容易被Adsense封号。
•还有很多危害,读者可以自行脑补……

js 级别的解决方案

<script type="text/javascript">
if (document.domain != 'nowamagic.net' && document.domain != 'www.nowamagic.net'){
 window.location.href='http://www.nowamagic.net/';
}
</script>

脚本很简单,如果地址栏中的网址不是 nowamagic.net 和 www.nowamagic.net 中的任何一个,那么就把地址栏转向 http://www.nowamagic.net/ 。这段代码同样可以避免被人使用反向代理技术“伪造”一个跟自己一模一样的网站。

题外话:如何防止网站被iframe嵌入。有些人用iframe做了个框架,把我们网站嵌入其中,访客来浏览的时候,好像是在浏览他自己的网站一样,那么如何解决呢?以下方法可破:

<script type="text/javascript">
<!--
if (top.location != self.location)top.location=self.location;
// -->
</script>

php 级别的解决方案

js 级别的解决方案虽然能够让恶意代理页面跳回来,但是对搜索引擎不怎么友好。下面是服务器端(PHP)的解决方案,代码比较简单,就不多说了。

$proxy_rs = $this -> proxy_filter();
if( $proxy_rs != 'nowamagic.net' || $proxy_rs != 'www.nowamagic.net' ) 
{
 echo '非法反向代理访问';
 //header('Location: http://www.nowamagic.net/');
 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'];
}

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!="nowamagic.net")&&($server!="www.nowamagic.net")){
 echo '本服务器禁止恶意反向代理!';
}
?>

这个由于我网站的特殊性,没试验过,但是网上常用这种方法。

Apache httpd.conf 级别的解决方案
这个 Apache 上如何禁止我还没捣鼓出来, Nginx 倒可以,但是我用的是 Apache,如果你知道,请告诉我下~

PHP 相关文章推荐
用PHP和ACCESS写聊天室(一)
Oct 09 PHP
php 获得汉字拼音首字母的函数
Aug 01 PHP
php动态实现表格跨行跨列实现代码
Nov 06 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
Jun 13 PHP
php获取网页标题和内容函数(不包含html标签)
Feb 03 PHP
Smarty变量调节器失效的解决办法
Aug 20 PHP
PHP实现简单汉字验证码
Jul 28 PHP
在WordPress的文章编辑器中设置默认内容的方法
Dec 29 PHP
php封装一个异常的处理类
Jun 08 PHP
Laravel框架文件上传功能实现方法示例
Apr 16 PHP
PHP fopen中文文件名乱码问题解决方案
Oct 28 PHP
PHP执行系统命令函数实例讲解
Mar 03 PHP
PHP中获取时间的下一周下个月的方法
Mar 18 #PHP
php读取目录所有文件信息dir示例
Mar 18 #PHP
PHP将两个关联数组合并函数提高函数效率
Mar 18 #PHP
PHP读取文件内容后清空文件示例代码
Mar 18 #PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
Mar 17 #PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
Mar 17 #PHP
PHP同时连接多个mysql数据库示例代码
Mar 17 #PHP
You might like
PHP编程风格规范分享
2014/01/15 PHP
PHP实现图片旋转效果实例代码
2014/10/01 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
基于jQuery UI CSS Framework开发Widget的经验
2010/08/21 Javascript
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
2013/07/16 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
原生js图片轮播效果实现代码
2016/10/19 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
前端构建工具之gulp的配置与搭建详解
2017/06/12 Javascript
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
基于layui轮播图满屏是高度自适应的解决方法
2019/09/16 Javascript
html2canvas属性和使用方法以及如何使用html2canvas将HTML内容写入Canvas生成图片
2020/01/12 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
Python脚本实现代码行数统计代码分享
2015/03/10 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
2018/06/13 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
P/Invoke是什么
2015/07/31 面试题
综合测评自我鉴定
2013/10/08 职场文书
大学军训通讯稿
2014/01/13 职场文书
党员一帮一活动总结
2014/07/08 职场文书
英语读书笔记
2015/07/02 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
Pillow图像处理库安装及使用
2022/04/12 Python