https可以徹底解決劫持的問(wèn)題。但是一般虛擬主機(jī)都不支持 https,難道http只能任流氓們惡意劫持么?
既然只有第一次訪問(wèn)時(shí)才會(huì)出現(xiàn)抽獎(jiǎng)鏈接,通過(guò)JS在瀏覽器中檢測(cè),如果發(fā)現(xiàn) 被植入的 代碼,則自動(dòng)刷新網(wǎng)頁(yè),就可以解決被劫持的問(wèn)題了。
現(xiàn)在要做的就是得到 被植入的代碼。找了一圈,沒(méi)有找到檢查的工具。網(wǎng)站傳輸?shù)娇蛻舻臑g覽器,需要三個(gè)步驟:【1】服務(wù)器 -> 【2】運(yùn)行商 -> 【3】客戶瀏覽器。
劫持出現(xiàn)在第【2】步,因?yàn)殡x開了服務(wù)器,已經(jīng)不受控制了。但是第【3】部的瀏覽器可以通過(guò)JS來(lái)控制。通過(guò) Ajax 上傳 客戶最終獲取到的代碼,就可以對(duì)進(jìn)行分析了。
運(yùn)行效果如下:

?php
//根據(jù)訪問(wèn)域名,創(chuàng)建不同的目錄
$log_path = $_SERVER['SERVER_NAME'];
if( !is_dir($log_path) ){
mkdir($log_path);
}
//根據(jù)訪客IP,分別記錄
$log_path .= '/' . $_SERVER['REMOTE_ADDR'];
if( !is_dir($log_path) ){
mkdir($log_path);
}
//按天分組
$log_path .= '/' . date('Y-m-d', time());
if( !is_dir($log_path) ){
mkdir($log_path);
}
//根據(jù)時(shí)間生成文件名
$log_file = $log_path . '/' . date('His', time()) . '_' . rand() . '.html';
//保存日志
$html = '';
$html .= 'URL:/' . post('url') . 'hr>';
$html .= 'HEAD:br>textarea cols="200" rows="40">' . post('head') . '/textarea>hr>';
$html .= 'BODY:br>textarea cols="200" rows="40">' . post('body') . '/textarea>';
file_put_contents($log_file, $html);
die('{"help":"http://www.miaoqiyuan.cn/p/browser-page-tracert/","log_file":"' . $log_file . '"}');
//調(diào)用的函數(shù)
function post($input){
$post_str = isset($_POST[$input]) ? $_POST[$input] : '';
$post_str = str_replace('\\', '', $post_str);
$post_str = iconv_substr($post_str, 0, 50000); //防止惡意上傳假日志
return $post_str;
}
?>
調(diào)用很簡(jiǎn)單,比如將 上邊的php代碼保存到了 /log/page_tracert.php
,然后在整站頁(yè)面中都加入 以下的代碼,就可以獲取到 所有的訪問(wèn)記錄了。根據(jù)訪問(wèn)記錄,得到 被植入的代碼后,就可以進(jìn)行檢測(cè)腳本的開發(fā)了。
$(function(){
$.post('/log/page_tracert.php',{
url : location.href,
head : $('head').html(),
body : $('body').html(),
},function(){});
});
注意:得到數(shù)據(jù)后,一定要盡快刪除 測(cè)試代碼。因?yàn)樗麜?huì)產(chǎn)生大量的日志,產(chǎn)生虛擬主機(jī)雙倍的流量消耗。
總結(jié)
以上所述是小編給大家介紹的Ajax 實(shí)現(xiàn)網(wǎng)站劫持的檢測(cè)方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!