是否可以阻止特定脚本中的特定函数在浏览器中执行,可能是通过使用预定义规则将该函数的调用重定向到脚本文件的静态/修改版本?(类似于我们使用广告拦截器扩展或用户脚本来自定义 DOM 的方式,但这次是操作脚本本身。
请考虑此方案,website.com
大量使用客户端呈现。当访问https://website.com/article.html
时,捆绑的大JS文件https://website.com/entire-app.js
将呈现整个网页,包括内容和广告。
最后,antiAdBlockerMethod()
将在同一脚本文件中调用名为isAdblockerFound()
inhttps://website.com/entire-app.js
的函数。它检查页面上的广告是否确实已加载,并执行其他广告拦截器检测过程。如果这个函数返回true
,antiAdBlockerMethod()
将垃圾桶,并用一些大的警告文本替换DOM中的所有渲染元素。
在这种情况下,脚本https://website.com/entire-app.js
处理所有客户端页面呈现,包括广告和内容,因此简单地阻止它加载将导致网站无法访问。
为了只绕过/愚弄isAdblockerFound()
,我想出的想法是以某种方式将isAdblockerFound()
函数替换为一个总是返回false
的函数,然后再调用它。也就是说,告诉浏览器将isAdblockerFound()
调用重定向到脚本文件的静态/修改版本中的自定义isAdblockerFound()
,在本地托管或临时驻留在浏览器中。
我知道,如果我们不需要预定义的规则,我们可以使用 devtools 用断点冻结脚本,并轻松地执行行间的任何内容。但是,我们如何使用预定义的规则自动执行此操作呢?需要哪些扩展/工具?
谷歌没有给我任何有用的东西(所有的结果都是关于快速路由等)。
编辑:我知道我可以随时禁用我的广告拦截器,这将是这个问题的一个微不足道的解决方案。我也理解为什么广告首先存在于网络上,并欣赏广告带来的有价值的内容。实际上,我从来没有动机将其应用于我访问的任何网站,而且我不知道有任何网站采用与我示例中website.com
完全相同的广告拦截器检查程序。我问这个问题是因为我只是好奇是否有可能绕过这种检查。
我想,在不同的上下文中,一个网站可能是恶意的,安全工程师需要进行分析。在这种情况下,他可能会发现愚弄环境检查过程很有用。
Firefox 提供了 webextension API webRequest.filterResponseData() 来检查和重写任何网络请求的内容,包括 javascript 加载。这将允许您解析 javascript 并替换有问题的方法。
这只剩下构建一个强大的、流式的 JavaScript 匹配和重写引擎的任务。