五分钟新概念之函数劫持

本文介绍了JavaScript中的函数劫持,即在函数执行前添加额外功能,常见于钩子函数。通过示例展示了如何劫持alert并用于XSS攻击监测和自定义业务功能。同时,讨论了如何检测函数是否被劫持以及反劫持策略,如在iframe中执行敏感操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天接触到了一个陌生的名词:函数劫持,查了一些资料记录一下。
函数劫持的意思是在一个函数运行之前把它劫持下来,添加我们想要的功能,然后再调用原来的函数执行。这也是常见的钩子函数的原理之一。
举一个简单的例子:
var _alert = alert;
window.alert = function(s) {
console.log(‘alert:’, s);
_alert(s);
}
复制代码二、应用

XSS攻击经常使用alert测试是否存在跨站,所以可以通过劫持alert函数来监测是否有人在攻击你的网站。在监测的页面劫持alert函数,记录调用情况。function report(caller) {
var img=new Image();
img.src=http://www.site.com/getReport.php?caller=${encodeURIComponent(caller)};
}
var _alert = window.alert
window.alert = function(s) {
report(alert.caller)
_alert(s)
}
复制代码
自定义业务功能。业务代码经常会有新需求的加入,对原代码进行修改匹配,常常比较耗费时间,这个时候就可以使用函数劫持,在不修改原业务逻辑的前提下,增加新功能。

三、劫持与反劫持

判断某个函数是否被劫持?function foo() {console.log(foo);}
alert.toString() // “function alert() { [native code] }”
foo.to

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值