网站被跳转到联通域名无法访问页面
早上,访问网站正文页面的时候,页面加载一部分后,自动跳转到了联通的域名无法访问页面,http://bjdnserror1.wo.com.cn:8080/issueunziped/bj140404/self0.jsp?UserUrl=world.xxx.com,
发现问题后,一开始以为是dns,但是通过分析,频道页,列表页,网站首页都没有问题,只有正文页面有问题;之后进行抓包,发现页面部分内容是可以正常加载的,加载一部分后就自动跳转,这时就想到有可能是页面模板被篡改,问过相关人员,早上没有进行任何修改与代码的提交;既然没有提交修改,又不是dns劫持的问题,那页面模板只有广告和其他业务的数据导致的,通过排查页面上的版块,发现一个版块引入的ssi中包含了:
<html> <script language=javascript type="text/javascript"> window.location.replace("http://bjdnserror1.wo.com.cn:8080?HOST=" + location.hostname + "&R=" + location.pathname + "&" + location.search.substr(location.search.indexOf("\?")+1)); </script> <noscript> <meta http-equiv="refresh" content="0;URL=http://bjdnserror1.wo.com.cn:8080"> </noscript> <head> <title>Redirect</title> </head> <body bgcolor="white" text="black"> </body> </html>
查看这部分内容, 这个就是导致页面自动跳转的原因,那么,为什么会出现这段代码呢?询问相关人员,是CMS机器上的一个定时任务抓取论坛热点文章导致的,
抓取部分代码如下:
$url = 'http://www.fadfadsfadsf.com/a.php';//错误接口地址
$content = '';
$rank_info = file_get_contents($url);
$rank_info = trim($rank_info);
if (empty($rank_info) || stristr($rank_info,"Database Error")) return false;
$rank_info = strrev(substr($rank_info, strpos($rank_info, '<')));
$rank_info = strrev(substr($rank_info, strpos($rank_info, '>')));
$rank_info = str_replace('\n', '',$rank_info);
$file = fopen("test1.txt","w");
echo fwrite($file,$rank_info);
通过测试,有可能是定时任务在抓取瞬间,这个接口地址的dns解析出现问题,抓取后的内容就是上面自动调转的代码,当系统出现问题时,第一时间内要解决问题,赶紧让人通过手动更新了一下抓取任务,抓取就数据正常了。
通过这个问题,考虑到后续需要改进的几点:
1.业务与业务的内部系统间传递接口数据,最好采用json或xml形式,并且要包含数据获取正常与否的状态位;我们的问题发生是论坛业务提供的数据接口是js形式,cms人员还得通过过滤来获取数据,不知道以前的人员是怎么想的。。。。
2.可以在服务器上指定交互系统的ip,跳过dns解析;
3.运维可以考虑监控数据接口的调用结果,但是这个应该是个比较复杂的工程