2013-12-15 4 views
13

Итак, вот в чем проблема.JavaScript полностью «несанкционированный» переменные

У меня есть что-то вроде:

// Dangerous __hostObject that makes requests bypassing 
// the same-origin policy exposed from other code. 
(function(){ 
    var danger = __hostObject; 
})(); 
delete __hostOBject; 

Am Я совершенно безопасно, зная, ни один скрипт не может подделать или получить доступ __hostObject?

(если они могут, у меня есть CSRF vulnerability или хуже.)

Примечание 1: Это для расширения браузера. У меня лучшие перехватчики, чем другие скрипты, запущенные на странице. Я выполняю перед ними, и я закончил, прежде чем они даже загрузились.

Примечание 2: Я знаю, что это было задано несколько раз для скриптов в целом. Мне интересно, если это возможно, если я знаю, что загружаю до любых других скриптов.

+0

Я написал [пример кода] (http://jsfiddle.net/35G8e/2/), который переписывает 'Function.prototype .call'. (Не стесняйтесь отмечать этот пост, если вы действительно думаете, что я помогаю вредоносным разработчикам. По-моему, потенциальные злоумышленники все равно будут знать эти методы.) – ComFreek

+1

@ComFreek Вы забыли «вернуть» результат «oldCall». Но на самом деле, это общий принцип, используемый для использования JavaScript-меток monkey-patch (встроенный). –

ответ

5

При удалении __hostObject код в вашем вопросе безопасен.

Однако я предполагаю, что ваш реальный код немного сложнее. В этом случае требуется очень тщательное кодирование, потому что страница может изменять встроенные методы (например, Function.prototype.call), чтобы попасть в ваше закрытие и делать все, что угодно. Я успешно злоупотреблял функциональностью инфраструктур расширения, таких как Kango и Crossrider, посредством этого метода, когда я выполнял такой тест.

+0

Ты сегодня очень острый (или повезло, но я бы хотел подумать острый). Это проблема, с которой мы сталкиваемся сейчас с Crossrider. Теперь я тестирую BHO для Internet Explorer, и мне нужно, чтобы JavaScript делал запросы, которые обошли политику перекрестного происхождения и/или хранилища данных кросс-сайта в реестре. Обе очень проблематичные операции. Я не мог придумать лучшего способа. (Кроме того, если вы можете добавить пример кода для такого эксплойта с '.call' - это будет действительно набухать). Есть ли надежный способ убить приложение, если что-то вроде '.call' было подделано? (В задумчивости - они могут это сделать после загрузки). –

+1

@BenjaminGruenbaum Код для злоупотребления функциональностью тривиален, я не буду публиковать образец кода, чтобы не кормить вредоносных разработчиков. Я просто пишу ответ на ваш другой вопрос, следите за обновлениями;) –

+0

Прошу прощения, ребята. Я пытаюсь понять проблему и решение, но не смог. Можете ли вы, ребята, объяснить немного больше? – thefourtheye

0

не будет просто добавить точку останова и перезагрузки сценарий подвергать __hostObject

+0

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

+0

Хорошо, это звучит правдоподобно. –

Смежные вопросы