Наилучшая практика:Допустимый межсайтовый скриптинг

StackOverflow https://stackoverflow.com/questions/52646

  •  09-06-2019
  •  | 
  •  

Вопрос

Хотя межсайтовый скриптинг обычно рассматривается как негативный, я сталкивался с несколькими ситуациями, когда это было необходимо.

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

Из-за ограничений XMLHttpRequest объекты, невозможно получить контент из другого домена.Вот я и подумал iFrame - iFrame - несмотря на то, что я не фанат фреймов, я подумал, что мог бы создать фрейм, соответствующий ширине и высоте содержимого, чтобы оно выглядело нативным.И снова я был заблокирован "защитой" от межсайтовых скриптов. Хотя я действительно мог загрузить удаленный файл в iFrame - iFrame, я не смог запустить JavaScript, чтобы изменить его размер ни на главной странице, ни внутри загруженной страницы.

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

Удаленный JavaScript работает.Он ломается, когда у пользователя отключен JavaScript, что является недостатком;но это работает."Проблема", с которой я столкнулся при использовании удаленного JavaScript, заключалась в том, что мне пришлось использовать функцию JS document.write() для вывода любого контента.Любой вывод, который не является JS, вызывает ошибки скрипта.В дополнение к использованию document.write() для каждой строки вы также должны убедиться, что содержимое экранировано, иначе вы получите больше ошибок скрипта.

Мое решение было следующим:

Мой скрипт получил параметр GET ("страница"), а затем искал файл ({$page}.php), и считывает содержимое в переменную.Однако мне пришлось использовать неудобные методы буферизации, чтобы фактически выполнить включенные скрипты (для таких вещей, как взаимодействие с базой данных), а затем удалить конечное содержимое всех символов разрыва строки (\n), за которым следует экранирование всех обязательных символов.Конечным результатом является то, что мой оригинальный скрипт (который выводит JavaScript) обращается к, казалось бы, "стандартным" скриптам на моем сервере и преобразует их стандартный вывод в JavaScript для отображения в шаблоне CMS.

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

Это было полезно?

Решение

У вас есть три варианта:

  1. Создать скрипт прокси-сервера на стороне сервера.
  2. Создайте удаленный скрипт для чтения в удаленном динамическом HTML.Используйте библиотеку, подобную jQuery чтобы сделать это проще.Вы можете использовать функция загрузки вводить HTML там, где это необходимо. Редактировать То, что я изначально имел в виду, например, # 2, заключалось в использовании JSONP, который требует, чтобы серверный скрипт распознал параметр "обратный вызов =?".

  3. Используйте флэш-прокси на стороне клиента и настроить crossdomain.xml файл в корневом каталоге вашего веб-сервера.

Другие советы

Лично я бы обратился к этому другому домену на сервере и получите и проанализируйте имеющиеся там данные для использования на вашей странице.Таким образом, вы избегаете каких-либо проблем и получаете возможности серверного языка / платформы для получения и анализа данных.

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

Ты мог бы попробовать easyXDM, включив очень мало кода, вы можете передавать вызовы данных или методов между документами разных доменов.

Я сталкивался с этим Прокси-скрипт на стороне сервера YDN раньше.В нем говорится, что он создан для работы с поисковыми API Yahoo.

Будет ли это работать с любым доменом, если вы просто урежете код API Yahoo?Или вам нужно заменить его доменом, с которым вы хотите, чтобы он работал?

удаленный контент iframe может быть доступен с помощью локального javascript.

Удаленному серверу просто нужно установить document.domain страницы.

Например:

Сайт A содержит iframe с src='Site B/home.php'

home.php выглядит примерно так :

[php stuff]...[/php]
[script type='text/javascript']document.domain='Site A'[/script]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top