04.02 2009

Тут всё гораздо интереснее

Автор: admin | Категории: Пишут люди


Тут всё гораздо интереснее

Тут всё гораздо интереснее. Приведенный скрипт отлично работает и на первый взгляд складывается впечатление, что Same Origin Policy не применяется. Но это не так. Просто метод getScript выполняет несколько дополнительных операций. В этом легко убедиться, если с помощью отладчика (я использовал Firebug) остановить выполнение скрипта на 3-ей строке. Если в этот момент переключиться на вкладку HTML, то увидим такую картину. Внутри заголовка страницы появился новый тег script с данными от wipmania.

Обратите внимание, на его атрибут src. Т. е. получается, что из этого скрипта можно отправлять запросы на сервер api. wipmania. com и при этом будет соблюдаться Same Origin Policy. Примечание. В данном примере отправлять запросы из этого скрипта нет смысла, т. к. он сам по себе содержит все необходимые данные.

Тут всё гораздо интереснее

После завершения работы функции jQuery этот тег удаляет. 4) В последнем эксперименте я решил использовать JSONP. Подробно о его результатах и вообще об этом формате я напишу в одном из следующих постов. Сейчас только расскажу о тех моментах, которые касаются XSS. В принципе, ситуация аналогична предыдущему примеру. jQuery использует дополнительный тег script с помощью которого и обеспечивается доступ к другому домену. Кстати, формат очень удобный, особенно учитывая то, что он поддерживается многими JavaScript библиотеками. Вам нужно только отправить запрос и написать обработчик (функцию), который получит ответ сервера, а всё остальное библиотека сделает за вас. Создаст тег script с соответствующим атрибутом src, отследит момент получения данных, вызовет ваш обработчик и удалит script. Таким образом, получить данные с другого хоста можно следующими способами. 1) С помощью прокси (метод описан в статье «Как обойти запрет на XSS» (http://www. simplecoding. org/kak-obojti-zapret-na-xss. html)). 2) С помощью Flash. Сам я не пробовал, но надежные источники утверждают, что этот так. По идее должно работать и для Silverlight. 3) С помощью тега script. Если вам нужно обращаться к какому-нибудь серверу, то придется добавить скрипт с этого сервера на свою страницу. Т. е. всё будет работать в рамках Same Origin Policy.

Кстати, именно так работают Google Maps и Яндекс. Карты. Может быть, существуют и другие варианты. Если есть идеи – пишите в комментариях, обсудим

Понравилась статья? Получай обновления и будь всегда в курсе событий!
Подпишись на RSS или
blog comments powered by Disqus