让我们假设我不信任访问我网站的浏览器。例如,如果它们覆盖XMLHttpRequest.prototype
并重定向或更改请求,该怎么办。有什么办法可以防止这种情况发生吗?也许通过将所有对象重置为"0";工厂设置";装载结束时?
如果您的脚本最初运行,您可以保存对所需内容的引用,如下所示&冻结它。
(() => {
const XHR = XMLHttpRequest;
Object.freeze(XHR);
// use XHR here ...
)();
否则,我认为除了检查函数是否是本机函数之外,不可能确定它——转换为字符串(function + '')
应该显示它是本机功能。
并且针对这个功能运行一些简单的单元测试,以确保它是可以的
运行单元测试可能是必要的,以确保函数之间是否没有相互更改(仍然是本机的(。
const alertRef = alert;
alert = console.log;
console.log = alertRef;
另一个可能有用的选项是检查函数length
属性,该属性定义了它接受的参数数量。要小心,因为不同的浏览器可能会有所不同。