2015-05-06 1 views
1

Я создаю структуру безопасности, которая вставляет файл javascript, который всегда будет выполняться первым и блокирует некоторые функции, которые будут выполняться. Разработчики создадут свои собственные webapps, и скрипт будет уверен, что некоторые функции не могут быть вызваны.Вызов переопределенной и замороженной функции

Давайте предположим, что «блокирование» сценарий выглядит так:

window.alert = function(){Object.freeze(this)} 

Есть ли способ для приложения, чтобы обойти этот блок, не используя плавающие фреймы/внешние файлы? delete (window.alert) не работает в этом сценарии.

+0

Вы перезаписаны предупредительного метод, так Нет, больше нет способа вернуть исходное предупреждение. – adeneo

+0

При вызове 'alert()' сначала выполняется функция 'Object.free', а затем оригинальная функция JS' alert', правильно? – sp00m

+1

Вы можете написать метод предупреждения нового окна и вывести его на консоль или отобразить в элементе HTML, видимом на вашей странице. –

ответ

0

Вам необходимо установить alert на Window.prototype, а не на window. В противном случае:

Window.prototype.alert.call(window, 'This works.'); 
+1

Спасибо, это действительно вызвало предупреждение! Я не знаю, почему вас забирают. – Ambi

+0

@Thom Smith очень жаль нисходящего (играя с моей мышью во время телефонного звонка ...) снова Я использовал ваш код, чтобы обновить свою скрипку. По-видимому, я могу отменить, чтобы выжить в течение 24 часов, если вы не отредактируете свой ответ ... извините еще раз – scraaappy

2

нет, если вы не можете остановить этот скрипт работает первым, в противном случае вы могли бы Asign оригинальный alert к чему-то еще:

var oldAlert = window.alert; 
window.alert = function(){Object.freeze(this)} 

Как/почему вы используете alert? если для его отладки вам будет лучше использовать console.log. если вы используете его для уведомления пользователей, то, возможно, выделенный вариант будет лучшим вариантом.

Основываясь на вашем обновленном вопросе, это зависит от загрузки вашей фреймворка.

Допустим, вы предоставили скрипт разработчику для использования, в этом случае они могли бы очень легко изменить то, что делает ваш скрипт. если код работает в env, который не принадлежит вам, вы можете предположить, что он не безопасен. плагины браузера могут блокировать скрипты, обойдется любая защита, основанная на файле javascript.

+0

Последующий вопрос: если переопределить предупреждение прямо в начале HEAD, есть ли способ выполнить код перед ним (при условии, что первый скрипт внутри головы всегда будет быть блокирующим предупреждение)? Возможно, какое-то событие я проигнорирую вид onLoad() Спасибо! – Ambi

+1

javascript выполняет в порядке, просто напишите его в том порядке, в котором вы хотите его запустить – atmd

+0

Но дело в том, что я не могу изменить порядок, сценарий всегда будет первым. В этом случае я ничего не могу сделать? – Ambi

1

на основе работы @Abdennour Туми на этот пост: Opposite of Object.freeze or Object.seal in JavaScript, вы можете сделать что-то подобное:

window.alert = function(){Object.freeze(this)} ; 

Object.unfreezeAlert=function(){ 
     return window.prompt; 
} 

window.alert = Object.unfreezeAlert(window.alert); 
alert ('test4'); 

http://jsfiddle.net/scraaappy/pxv51zqg/

+0

однако, я заметил странное поведение, которое я уведомил в скрипте – scraaappy

+0

Да и, кроме того, вы заменяете предупреждение подсказкой, поэтому предупреждение по-прежнему заблокировано. – Ambi

+0

нет, это не проблема. См. Скрипт, предупреждение в настоящее время повторно активировано (спасибо @Thom Smith), но проверьте его, неожиданное поведение: если вы вызываете предупреждение перед тем, как пытаться разморозить, это не сработает. Мне интересно, если у вас есть какие-либо объяснения по этому поводу. В любом случае, хотя интерес был в основном для того, чтобы повторно использовать метод оповещения, а не реактивировать его. – scraaappy