При установке пакетов из npm в консоли периодически отображаются предупреждения о том, что тот или иной javascript пакет загрязняет прототип . Что это означает и чем это может быть опасно сейчас в данной статье я вам и расскажу.

Что такое загрязнение прототипа в JavaScript?

При установке пакетов из npm в консоли периодически отображаются предупреждения о том, что тот или иной javascript пакет загрязняет прототип. Что это означает и чем это может быть опасно сейчас в данной статье я вам и расскажу.

Начнем с того, что, для примера, переопределим встроенный метод push объекта Array своим собственным методом, при этом в коде мы сохраним ссылку на оригинальны метод, чтобы в конце вызвать его. Сделаем, мы это для того чтобы у конечного пользователя не возникли ошибки. Код далее:

// сохраняем ссылку на оригинальный метод
var _push = Array.prototype.push;

// определяем свой собственный метод
Array.prototype.push = function( item ) {

    // перед выполнением метода, выполняем некую операцию, 
    // например выведем в консоль некоторое значение
    console.log( 'некоторое значение' );

    // вызываем оригинальный метод
    _push.apply( this, arguments );

    // выполняем некоторую операцию после вызова оригинального метода.
    if( this.length > 1000 ) {
        console.warn( 'может быть здесь что-то не так' );
    }
}

Вся суть примера выше, сводится к тому, что JavaScript очень гибкий язык, поэтому, вы можете в собственном коде переопределять любой встроенный метод или же добавлять к существующему типу свои методы. Это плюс. Но с другой стороны это и минус, так в любой сторонней библиотеке (NodeJS), может быть встроена дополнительная, отнюдь далеко не безвредная функциональность.

Например, представим что вы установили через пакетный менеджер npm какую-то библиотеку, которая Вам необходима для разработки приложения. Эта библиотека имеет зависимости от сторонних разработчиков, в одной из которых может происходить загрязнение прототипа функции того же объекта Array. Теперь при каждом вызове метода push, код в этом поддельном методе может собирать любую доступную информацию на Вашем ПК, например, в том числе пароли, коды доступа, в общем много чего.

В результате чего вся Ваша система, и не только ваша, если кодом будут пользоваться другие, становится уязвима к различного рода атакам.

Поэтому этот материал призвана обратить Ваше внимание на такие, далеко не простые, но тем не менее важные вещи, касающиеся безопасности при разработке на NodeJS.