gpt4 book ai didi

javascript - 检测对 native 浏览器对象的操作

转载 作者:行者123 更新时间:2023-11-28 07:25:56 24 4
gpt4 key购买 nike

诸如grease-monkey之类的插件可以在网页脚本获取原始对象的句柄之前修改 native javascript对象句柄。

这可以实现出色的用户脚本功能,但也可能是网站提供商不需要的。因此,javascript 环境可以被视为对抗性的。

下面是我认为在加载网站脚本之前可能发生的对 native 对象句柄的无法检测的更改的示例

//closure to prevent variable leaks
(function(){

//malicious action (sudo detectable in this case)
var alertCopy=alert;
alert=function(a){alertCopy("Lol. You wanted to alert:"+a)};

//the cover-up
var toStringCopy=Function.prototype.toString;
Function.prototype.toString=function(){
var subject=this;
if(subject===alert){
subject=alertCopy;
}else if(subject===Function.prototype.toString){
subject=toStringCopy;
}
return toStringCopy.call(subject);
}
})();

在 Chrome 中进行测试:

alert('hi');//alerted 'hi'
undefined
alert.toString();
"function alert() { [native code] }"
alert.toString.toString();
"function toString() { [native code] }"
//closure to prevent variable leaks
(function(){

//malicious action (sudo detectable in this case)
var alertCopy=alert;
alert=function(a){alertCopy("Lol. You wanted to alert:"+a)};

//the cover-up
var toStringCopy=Function.prototype.toString;
Function.prototype.toString=function(){
var subject=this;
if(subject===alert){
subject=alertCopy;
}else if(subject===Function.prototype.toString){
subject=toStringCopy;
}
return toStringCopy.call(subject);
}
})();
undefined
alert('hi');//alerted 'Lol. You wanted to alert:hi'
undefined
alert.toString();
"function alert() { [native code] }"
alert.toString.toString();
"function toString() { [native code] }"

那么,如果在页面加载之前已经设置了类似的内容,有什么方法可以检测到这些修改吗?

请注意,服务器仍然会认为来自客户端的所有通信都是敌对的,这只是为了让客户端代码在执行之前尝试检测其环境是否已被修改,以便它可以采取相应的行动。

相关:How to get the original native browser objects, if they have changed?

最佳答案

简而言之,你不能。您在无法控制的环境中运行代码。无法确保您的检测脚本能够正常运行。

例如,如果我可以控制环境,我可以在运行脚本之前对其进行编辑。所以如果你有魔法isNative(fn)函数以某种方式检测对核心的修改,环境可以简单地将其替换为 function isNative(fn) { return true; } ...

这是 JavaScript Cryptography Is Bad 的原因之一...

简而言之,在服务器端执行任何敏感操作。不要相信客户端的计算结果。

关于javascript - 检测对 native 浏览器对象的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29653623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com