js跨域验证网站是否在线

 nohacks   2018-01-04 01:34   2039 人阅读  0 条评论
本文主要介绍js跨域验证网站是否在线的方法,由nohacks.cn原创,转载请注明出处,谢谢合作!




原理:php验证网站是否在线然后构造jsonp服务返回jsonp格式数据给js调用。


看下php部分源码:

<?php
//jsonp server v1.8  by  nohacks.cn
// 使用方法:$.ajax 需设置 jsonp: 'cb'

// 1.验证网站是否在线      格式:"/su.php?tp=lsurl&wd=url"       
// 返回 $cb({"q":"url","p":false|true),"s": true|false)};
// 输出格式: $cb({"q":"关键字","p":“是否失败(true|false)”,"s":["内容1","内容2","内容3"]}); 

 //header('content-type:application/json;charset=utf8');
 //header("Content-Disposition:attachment;filename='su.js'");

//防盗链域名,多个用|隔开,如:api.nohacks.cn|mov.nohacks.cn(不设置盗链请留空或前面加注释符"//"注释掉)
define('REFERER_URL', '');


if(!is_referer()){
	 header('HTTP/1.1 404 Forbidden');
     exit('404,您请求的文件不存在!');
}


//参数过滤
$cb = $_GET["cb"];
$cb = isset($cb) && $cb ? $cb:'success';
$cb = trim(htmlspecialchars($cb));

$tp=$_GET["tp"];
$tp = isset($tp) && $tp ? $tp:'';
$tp = trim(htmlspecialchars($tp));

$wd=$_GET["wd"];
$wd = isset($wd) && $wd ? $wd:'';
$wd = trim(htmlspecialchars($wd));
$sug=array('q'=>"",'p'=>false,'s'=>array(''));
$myObj = new Jsonp();
//判断tp参数检测结果 if($tp=='lsurl'){ $sug['s']=$myObj->lsurl($wd); $sug['q']=$wd; }else{ $sug['p']=true; $sug['q']="input error"; } echo $myObj->out_json($cb,$sug); //查询类 by nohacks.cn class Jsonp { public function lsurl($url, $post_data = '', $timeout = 10) {
$ch = curl_init();  
curl_setopt($ch, CURLOPT_URL, $url);  
//post提交,否则get 
 if ($post_data != '')
 {  curl_setopt($ch, CURLOPT_POST, 1); 
 curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);  } 
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  curl_setopt($ch, CURLOPT_HEADER, false); 
 //跳过SSL验证  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, '0'); 
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, '0'); 
 $file_contents = (curl_exec($ch)!=false);
  curl_close($ch); 
 return $file_contents;
}
     public function out_json($jsoncallback,$data)
   {
	   $json =json_encode($data);
	   return  $jsoncallback.'('.$json.');';  
   }   
}
function is_referer(){
	//没有定义防盗链或设置为空
  if(defined('REFERER_URL')==false){return true;}else if(REFERER_URL==""){return true;}; 
	//获取来路域名
	$host = parse_url($_SERVER['HTTP_REFERER'],PHP_URL_HOST);
	$ymarr = explode("|",REFERER_URL);
    if(in_array($host,$ymarr)){return true;}
    return false;
}
?> 
在看下js核心代码:

function lsurl(src,fun) {
	    
 $.ajax({
	     
		 url: 'su.php?tp=lsurl&wd='+ src, 		 
		 dataType: 'jsonp',
		 jsonp: 'cb', 
   
	     success:function(data){

				if (data.s){			
		           
				   if($.isFunction(fun)){fun(true);}
				  	  	
				}else{
						
					if($.isFunction(fun)){fun(false);}
				
				     }
					 
			},
				
		
		 error:function(){
	 
					if($.isFunction(fun)){fun(
false
);} } }) } //定义回调函数 var funcode=function (val){ if (val){ //验证通过 }else{ //验证失败 } } //调用 lsurl(“htp://www.baidu.com”,funcode);

本文地址:https://www.nohacks.cn/post/35.html
版权声明:本文为原创文章,版权归 nohacks 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?