如何防止别人反代主机的站
是啊很怕对吧?有个办法可以试试看。<?php
$nowurl = $_SERVER['HTTP_HOST'];
if($nowurl!="www.你的.com"){
header("location:www.baidu.com");
}或者JS<script type="text/javascript">
if (document.domain != 'yourdomain.com' && document.domain != 'www.yourdomain.com'){
window.location.href='http://大人站 /';
}
</script>或者301试试看咯。
一句话反代的方法来咯可以防止一般代理或反代自己的网站。PHP:
<?php
(isset($_SERVER['HTTP_X_REAL_IP']) || isset($_SERVER['HTTP_X_FORWARDED_FOR'])) && exit('<!--by amysql-->');
?>
Nginx:
$sent_http_connection
$sent_http_keep_alive
$server_protocol
变量判断。
JS:
打乱网址,进行window.location判断。
-----PHP的方法需X_FORWARDED_FOR有设置才有效,
Nginx的方法对Nginx默认http_proxy的配置有效,但还是可以更改的。
最后JS方法如果反代+替换的话仍然能更改。
看样子想彻底防止还是很困难,所有请求数据都可模拟与更改。
圈圈的反代方法
本帖最后由 404 于 2013-5-26 08:08 编辑
第一, 我标题党了
第二, 不保证没BUG, 不保证后续支持, 不保证与使用者的现有程序不冲突,性能方面没做优化, 没做详尽测试, 使用者自承风险
使用方法, php>=5.3
单独一个站->手动把以下代码放置在代码顶部 (<?php 下面)
全局->保存成单独的php文件, 然后把路径设置在php.ini的auto_prepend_file里
function miemie_hash_str($string, $add_mark='+'){
$len = strlen($string);
$chunk_length = mt_rand(1, $len)>>1;
$chunk_length = $chunk_length ? $chunk_length: 1;
$chunk_per_size = (int)($len/$chunk_length);
$chunk_per_size = $chunk_per_size ? $chunk_per_size: 1;
$result = array();
$current = 0;
while($current<$len){
$tmp = rand(1, $chunk_per_size);
$result[] = ($current && mt_rand(0,1)?" \n ":'').($current%2?"'":'"').addslashes(substr($string, $current, $tmp)).($current%2?"'":'"');
$current+=$tmp;
}
return join($add_mark, $result);
}
function miemie_anti_proxy($url=false){
if($url === false){
$url = (empty($_SERVER['HTTPS'])?'http://':'https://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
}
$val = '(window['. miemie_hash_str('top').']['.miemie_hash_str('location').']'.'=='. miemie_hash_str($url) .') || ('.'window['. miemie_hash_str('top').']['.miemie_hash_str('location').']'.'='. miemie_hash_str($url).');';
return $val;
}
ob_start(function($content){
// 关闭的时候在自己php文件顶部加一行
// define('MIEMIE_DISABLE', 1);
if(!defined('MIEMIE_DISABLE')) {
$inject_type = mt_rand(0,1);
$inject_content = miemie_anti_proxy();
if($inject_type == 0){
$content = preg_replace('~</head>~is', '<script'.(mt_rand(0,1)?"\n":"").">$inject_content</script>\n</head>", $content, 1);
}else if($inject_type == 1){
$inject_content = htmlspecialchars($inject_content);
$content = preg_replace('~<img([^>]+>)~is','<img '.(mt_rand(0,1)?"\n":"").'onerror="'.$inject_content.'" '.(mt_rand(0,1)?"\n":"").'onload="'.$inject_content.'"\\1', $content, 1);
}
}
return $content;
});
犀利的反代模式
圈圈js防反代啊。
不过,还可以破的啊。
把window["t替换掉。JS就跑不了。
圈圈回复
昨晚恍然发现连我都被反代了
其实可以填空空字符, 包括随机字符.replace....
js里global态可以拿this替代window..
再拿\xNNN, \uNNNN随机替代字符
不过现在这样已经够我用了......至少已经把几个反代站IP都挖了出来, 接下来就是判断IP然后301 location了
反代第三季
好吧, 对您这类高技术, 高智商的妹子(非歧视,Onz)。
可以采用多个 (2号)域名的组合方式。
比如说我准备 5 个域名。 5 个域名的全排列组合有多少, 我数学已经还给老师了, 反正是不少。
1域名 必须 和主域名 IP 一致。
2域名 必须 和主域名 IP 不一致。
3域名 必须 和主域名 IP 不一致。
4域名 必须 和主域名 一致。
5域名 必须 和主域名 一致。
这个组合答对了, 认为不是反代 正常访问。 如果答错了, 认定为是反代,输出 1024。
对方很厉害的话, 短时间使用程序测试出了, 那么换一种组合。 如果想让对方猜的费劲些, 增加一个二级域名好了。
以上 5 个域名, 纯属 yy。 其实 二级 域名和顶级域名的地位完全是等同的。 那么上面的5个域名完全可以用5个二级域名代替。
比如
cdn1.1024.com 1
cdn2.1024.com 0
cdn3.1024.com 0
cdn4.1024.com 1
cdn5.1024.com 1
被破解, 换个组合好了。 当然, 为了增加破解难度,可以多增加几个 二级子域名。
缺点, 参与混淆的域名越多, 就会更容易出现误判的现象。
当然这里面可以采用一种宽松的模式, 来降低误判的影响,比如设置一个阈值, 不见得要一下全中, 3吃访问, 两次命中,认为是正常访问。。。对于防破解。
都知道, 必须使用程序。 那么可以针对程序破解增加难度。
比如第一次未命中, 那么好吧, 高度可疑是反代高手的,那么您再次请求的时候, 对不起,我的地盘我做主,请您来验证个高难度的图片吧, 我知道您可以云打码,那就花钱慢慢打吧。。。打过去, 我没事看看反代的可疑IP和域名,发现被破解,我就换个组合吧。 您继续破解。
我还可以通过程序什么的监控反代域名, 这个是非常容易的,当发现对方已经破解了, 自动换个组合。。。
最强的方法qiqi
这么简单。。。服务端获取socket链接,然后用curl构造一个request,request到80,但是有误伤可能性。
最简单的就是javascript了,可以使用各种密文,然后再用javascript解密,这样就防止了反向代理自动替换特征码的可能性。
比如说后端一天自动更新一次scripts,密匙为今天的日期,密文自动生成,这样就替换不了了还有一个方式就是静态资源重定向,匹配静态资源规则到host的一个特定端口,当然他把你这个端口代理了,就没办法了。(可以拓展下,还有其他方法的)
最简单有效的还是javascript
而且还有一个问题,反代流量大了,会触发litmit request。很多方式的。HS反驳道
JS push 到前端的时候, 就不存在秘密了。
当然我不是专门搞破解的。 但是 js 混淆 或者 加密, 强度有多高呢 ? 对一个熟悉 js 的加密算法 的人来说, 应该不难破解的。qiqi接招
混淆过后的,可以做到把一个var a = "abc";
变成var a; var b = "xxxxxxxxx"; a= b;
基本上不能用替换脚本比如说 console.log
变态的可以做到
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d=k||e(c);k=}];e=function(){return'\\w+'};c=1;};while(c--)if(k)p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k);return p;}('z 9$=["","\\\\\\A\\y","\\\\\\t","\\\\\\t","\\q",\'\\w\\x\\B\\F\\l\\G\\l\\E\\C\',"\\D\\j\\v\\o\\j\\m\\r","\\m\\j\\q","\\p\\r\\o\\p"];u(h(a,b,c,d,e,f){e=h(g){i g};L(! 9$.n(/^/,H)){k(;c--;)f=d||c;d=}];e=h(){i 9$};c=J};k(;c--;)d&&(a=a.n(I( 9$+e(c)+ 9$, 9$),d));i a}( 9$,s,s,[ 9$, 9$, 9$],K,{}));',48,48,'|||||||||_||||||||function|return|x6f|for|x22|x6c|replace|x73|x74|x67|x65|0x3|x62|eval|x6e|x30|x2e|x2b|var|x77|x31|x3b|x63|x29|x28|x32|String|RegExp|0x1|0x0|if'.split('|'),0,{}))
原语句是console.log('test')HS继续反驳
关键点不是混淆。
你再混淆也需要提交到后台吧。
你提交的数据, 我需要动吗? 我只需要找到你的关键的那个变量, 然后我反代页面时代码上面加一句,把提交的参数剥离, 提交到我反代端,模拟正常用户提交就好了。
关键是找到有效的机制, 区别开正常访客和反代访客。在没有确定这个机制之前,讨论如何混淆,如何加密, 根本就没啥意义。
页:
[1]