Javascript 如何检查默认JS对象是否已修改?
我如何从我的JS脚本(在我的HTML页面上运行,加载到用户的浏览器中)检查一些基本JSAPI是否被用户欺骗(浏览器扩展或其他什么)?像Javascript 如何检查默认JS对象是否已修改?,javascript,google-chrome-extension,userscripts,monkeypatching,Javascript,Google Chrome Extension,Userscripts,Monkeypatching,我如何从我的JS脚本(在我的HTML页面上运行,加载到用户的浏览器中)检查一些基本JSAPI是否被用户欺骗(浏览器扩展或其他什么)?像HTMLElement.prototype.appendChild()方法或screen.width属性?一个基本(但绝非万无一失)方法是检查函数是否仍然由本机代码组成。如果不是,那么它肯定是被修补过的;如果是这样的话,那么如果它被修补过,它也会故意更改它的toString方法,以避免这种检测(这是可能的,但可能非常罕见): const checkValid=(
HTMLElement.prototype.appendChild()
方法或screen.width
属性?一个基本(但绝非万无一失)方法是检查函数是否仍然由本机代码组成。如果不是,那么它肯定是被修补过的;如果是这样的话,那么如果它被修补过,它也会故意更改它的toString
方法,以避免这种检测(这是可能的,但可能非常罕见):
const checkValid=()=>{
const{appendChild}=Node.prototype;
if(appendChild.toString()==`函数appendChild(){[本机代码]}`){
document.write('可能未被修改
);
}否则{
文件。写入('明确修改
');
}
};
checkValid();
Node.prototype.appendChild=()=>{
log('My monkeypatched function');
};
checkValid();
//可通过以下方式进行检查:
常量傻瓜=函数appendChild(){
log('My monkeypatched function');
};
toString=()=>`函数appendChild(){[本机代码]}`;
Node.prototype.appendChild=傻瓜;
checkValid()代码>您将如何检查您的支票是否未被修改…?您不能。你无论如何都不能信任客户。你为什么要这样做?我很感兴趣,但很难找到正确的方法。看看react.js,它们有常量类型值@乔纳斯威尔斯有权利。当您预测到客户端(浏览器)时,所有源都会暴露出来。也许如果涉及到你的检查服务器…我会支持这个QWell什么是你试图解决的问题,导致你想检查这个?没有上下文,这是一个。是的,我也考虑过这个方法,但是toString
可以递归地修补,正如你最后提到的,这是用户自己的浏览器-他们可以在上面运行他们想要的代码。即使您在这样的检查中编写代码,他们也可以简单地删除执行检查的代码,然后运行其余的代码。当然,我只是想了解基本情况。捕获懒惰的monkeypatchers很容易,而捕获专家monkeypatchers则不可能。