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


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 heredoc和phpwind的模板技术使用方法小结
Mar 28 PHP
对squid中refresh_pattern的一些理解和建议
Apr 17 PHP
php 字符串替换的方法
Jan 10 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
Jun 03 PHP
PHP反射机制用法实例
Aug 28 PHP
Yii框架关联查询with用法分析
Dec 02 PHP
php随机抽奖实例分析
Mar 04 PHP
php编写简单的文章发布程序
Jun 18 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
Aug 01 PHP
6个超实用的PHP代码片段
Aug 10 PHP
Symfony2在Nginx下的配置方法图文教程
Feb 04 PHP
Laravel学习教程之View模块详解
Sep 18 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中使用array函数新建一个数组
2015/11/19 PHP
Twig模板引擎用法入门教程
2016/01/20 PHP
PHP动态生成指定大小随机图片的方法
2016/03/25 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
2017/09/15 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
用于table内容排序
2006/07/21 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
2012/03/21 Javascript
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
js函数调用的方式
2014/05/06 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
2016/12/06 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
2018/01/23 jQuery
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
搭建一个nodejs脚手架的方法步骤
2019/06/28 NodeJs
原生js代码能实现call和bind吗
2019/07/31 Javascript
layui动态渲染生成左侧3级菜单的方法(根据后台返回数据)
2019/09/23 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
python实现带验证码网站的自动登陆实现代码
2015/01/12 Python
django反向解析和正向解析的方式
2018/06/05 Python
python pandas 时间日期的处理实现
2019/07/30 Python
给Python学习者的文件读写指南(含基础与进阶)
2020/01/29 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
Python函数递归调用实现原理实例解析
2020/08/11 Python
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
酒店节能减排方案
2014/05/26 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
5.12护士节活动总结
2015/02/10 职场文书
初中教师个人工作总结
2015/02/10 职场文书
2016年秋季新学期致辞
2015/07/30 职场文书
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android