Нет никакого способа гарантировать, что произвольный скрипт, который заменяет что-либо в глобальной области видимости, не будет эффективно блокировать любое изменение такого изменения. Лучшим решением, вероятно, было бы предотвращение запуска вредоносного кода с самого начала. Если вы по-прежнему удовлетворены предложенным планом действий, я бы порекомендовал одно из следующих решений (попробуйте их по порядку):
Решение № 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
});
Это не гарантирует, что другой скрипт не будет готов к изменениювсе снова.