Javascript 如何检查默认JS对象是否已修改?

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=(

我如何从我的JS脚本(在我的HTML页面上运行,加载到用户的浏览器中)检查一些基本JSAPI是否被用户欺骗(浏览器扩展或其他什么)?像
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则不可能。