JavaScript - это динамический язык, и даже без таких функций, как eval, становится очень трудно определить, вызывает ли скрипт определенную функцию. Наилучшее решение, которое я могу придумать, - это аналог @pixl coer для переопределения самой функции и выборочного вызова ее вместо ее постоянной блокировки.
Рассмотрим этот пример, который косвенно вызывает метод pop
для массива, называя его прерывистой строкой.
var p = 'p';
var o = 'o'
[2,3,4][p + o + p]();
Оборачивая фактический метод, вы можете выборочно решить, пропустить ли метод или заблокировать его во время выполнения.
Однако учтите, что даже это не является надежным. Каждый iframe получает свою собственную копию методов, таких как eval
. Кто-то может просто создать одноразовый iframe
, получить оттуда метод eval
и затем выполнить его.
Короче говоря, это определение не может быть сделано статически вообще. Даже динамически вам придется исправлять множество вещей, чтобы гарантировать, что определенная функция никогда не будет вызвана.