重寫JS setTimeout 方法 JavaScript Hook 劫持setTimeout
更新時間:2023年07月03日 21:58:22 作者:psonh
想要重寫 setTimeout 方法,發(fā)現(xiàn)有動態(tài)引入的js,需要改成自己的js,以下教教大家這個需求,防止網(wǎng)站被劫持
一、重新定義setTimeout方法
直接上代碼和注釋:
//定義 _setTimeout 接收 setTimeout
var _setTimeout = window.setTimeout;
// 重寫setTimeout
window.setTimeout = function(ref, tm){
code = '' + ref;//把方法tostring
//判斷內容有包含這個鏈接,可以直接方法
if(code.indexOf('www.jsjiami.com/main.js') !== -1){
ref = function () {
//我把它改成想改成其他的js
var script = document.createElement("script");
script.setAttribute("src","https://www.baidu.com/main.js");
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(script, s);
console.log('被劫持了哦1');
}
}
//判斷內容有包含這個方法
if(code.indexOf('method') !== -1){
ref = function () {
console.log('被劫持了哦2');
return ;
}
}
var argu = Array.prototype.slice.call(arguments,2);
var f = function(){
ref.apply(null, argu);
};
return _setTimeout(f, tm);
}應該看得明白吧,配合注釋看。
比如如下的代碼
setTimeout(function () {
//比如我要劫持這個引入js
var script = document.createElement("script");
script.setAttribute("src","https://www.jsjiami.com/main.js");
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(script, s);
},100);效果圖

直接請求百度了。
方法劫持我就不演示了。
當然我們也可以直接加載一個php頁面返回當期的網(wǎng)址,就知道哪個網(wǎng)站出現(xiàn)了劫持情況,及時排查解決。
相關文章
JS 根據(jù)子網(wǎng)掩碼,網(wǎng)關計算出所有IP地址范圍示例
這篇文章主要介紹了JS 根據(jù)子網(wǎng)掩碼,網(wǎng)關計算出所有IP地址范圍,涉及IP地址、子網(wǎng)的正則驗證,子網(wǎng)掩碼計算等相關操作技巧,需要的朋友可以參考下2016-09-09
js createRange與createTextRange的一些用法實例
關于createTextRange和createRange的一些用法,腳本之家增強版。2010-05-05
利用JavaScript中的高階函數(shù)和閉包實現(xiàn)命令模式
命令模式提供了一種優(yōu)雅的解決方案,使得我們能夠靈活地封裝和管理代碼操作,所以本文將為大家介紹命令模式的概念、應用場景以及在JavaScript中的實現(xiàn)方式,需要的可以參考一下2023-06-06
用于CSS代碼壓縮與格式化的javascript函數(shù)代碼
呵呵,發(fā)現(xiàn)只要幾行JS代碼就可實現(xiàn)css的壓縮與格式化,非常不錯。2009-12-12

