JavaScript: небезопасная изоляция скриптов

Я смотрю многие начинают задумываться об изоляции JavaScript, подключаемых в контекст страницы. Например, вы подключаете какую-то чужую библиотеку (виджет) с чужого сайта, но не очень-то ему доверяете.

Сейчас считается, что безопасным методом является что-то вроде:

(function (window, alert) {
    alert('Функция «alert» изолирована и доступ к методу из «window» теперь получить нельзя');
})({}, function (){})

Это не правильно.

Такой вызов вас ни от чего не защищает, более того, можно запросто «восстановить справедливость» и получить изнутри такого скрипта доступ к оригинальному window:

<script>
(function(window, alert){
    alert('Пичалька');

    (function(){ with(this) {
        alert('Уже всё хорошо'); 
    }}).call(null);
})({}, function(){})
</script>

В общем случае идея такой изоляции — плохая. Я не видел ни одного удачного примера подобной изоляции и не смог придумать его самостоятельно.

13 комментариев

Помидорный сок

Я люблю томатый сок, больше любых других. Особенно с пряностями. Мне всегда казалось, что в стране моего детства, СССР томатный сок существовал всегда. Читая книгу Ильфа и Петрова «Одноэтажная Америка» узнал что это не так (действие происходит в 1935):

И, наконец, с опаской, не сразу начали пить обыкновенный помидорный сок, предварительно поперчив его. Он оказался самым вкусным и освежающим и больше всего подошел к нашим южнорусским желудкам.

Ильф и Петров в 1935-36 гг. по заказу советской власти поездили по США и, как ни странно, похоже довольно честно описали тогдашнюю жизнь в Штатах. Что ещё более странно, книгу пропустила цензура и в 1937 году она была издана.

12 комментариев