乐之之

知而行乐,乐而行之,天道酬勤,学无止境。
如何解决toString检测?

  对于 一些浏览器环境检测时,比较常见的toString方法检测,查看函数方法是否修改,从而来检测爬虫行为,以下是一种过toString检测的方法。

1、修改toString方法。

  代码如下:

(() => {
    "use strict";
    const $toString = Function.toString();
    const myFunction_toString_symbol = Symbol('('.concat('',')_', (Math.random() + '').toString(36)));
    const myToString = function(){
        return typeof this == 'function' && this[myFunction_toString_symbol] || $toString.call(this);
    };
    function set_native(func, key, value){
        Object.defineProperty(func, key, {
            "enumerable": false,
            "configurable": true,
            "writable": true,
            "value": value
        })
    };
    delete Function.prototype['toString']; // 删除原型链上的toString
    set_native(Function.prototype, "toString", myToString); // 自己定义个getter方法
    set_native(Function.prototype.toString, myFunction_toString_symbol, "function toString() { [native code] }"); // 套个娃 保护一下我们定义的toString 否则就暴露了
    this.func_set_native = (func) => {
        set_native(func, myFunction_toString_symbol, `function ${myFunction_toString_symbol,func.name || ''}() { [native code] }`);
    }; // 导出函数到globalThis
    }).call(this);

2、修改指定的toString函数

window.open = function open(){}

3、调用修改测试

this.func_set_native(window.open)
console.log(window.open.toString())

  结果如下:

posted on 2024-08-01 11:18  乐之之  阅读(147)  评论(0编辑  收藏  举报