JS - вернуть исправленную / переопределенную функцию обезьяны в собственный код - PullRequest
0 голосов
/ 17 октября 2019

Я наткнулся на window.XMLHttpRequest.prototype.send, который обезьяна пропатчил / переопределил третьей стороной, использующей собственную версию функции, которая перехватывает вызовы с нашей страницы. Как первый участник, есть ли способ удалить исправления и вернуть функциональность к нативному коду?

1 Ответ

1 голос
/ 19 октября 2019

Нет никакого способа гарантировать, что произвольный скрипт, который заменяет что-либо в глобальной области видимости, не будет эффективно блокировать любое изменение такого изменения. Лучшим решением, вероятно, было бы предотвращение запуска вредоносного кода с самого начала. Если вы по-прежнему удовлетворены предложенным планом действий, я бы порекомендовал одно из следующих решений (попробуйте их по порядку):

Решение № 1 - используйте Object.defineProperty, чтобы предотвратить будущие изменения:

// have this line execute before the offending script does
Object.defineProperty(XMLHttpRequest.prototype, 'send', {
    value: XMLHttpRequest.prototype.send,
    writable: false
    });

Решение № 2 - Сохраните ссылку на функцию и попытайтесь заменить ее позже:

// have this line execute before the offending script does
const XMLHTTPRequest_send = XMLHttpRequest.prototype.send;

// have this line execute after
// Object.defineProperty is probably needed if the first solution doesn't work
Object.defineProperty(XMLHttpRequest.prototype, 'send', {
    value: XMLHTTPRequest_send
    });

Это не гарантирует, что другой скрипт не будет готов к изменениювсе снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...