Подтвердить что ты не робот

Насколько опасно отправлять HTML в AJAX, а не отправлять JSON и создавать HTML?

Возможный дубликат:
Почему плохая практика возвращает сгенерированный HTML вместо JSON? Или это?

Мне кажется, что любой перехват этого может обеспечить мгновенную проблему, потому что любой может отправить HTML/ script обратно клиенту.

Единственная причина, по которой я заинтересован в этом, - из-за огромной боли для разработчиков интерфейсов каждый раз, когда есть структура DOM/CSS, поэтому теперь вам нужно выяснить, где в процессе построения HTML-кода Javascript вам может потребоваться обновить.

Как вы, ребята, справляетесь с этим? Есть ли что-то, что я могу сделать, чтобы уменьшить риск или просто начать плохую идею?

4b9b3361

Ответ 1

Я стараюсь использовать следующие правила:

  • Запросить и вернуть HTML для быстрых фрагментов, а затем использовать клиентский (статический) Javascript для их вставки. Отлично подходит для предупреждений.

  • Запросить и вернуть JSON для больших наборов данных. Это отлично работает, если вы хотите выполнять фильтрацию, группировку или сортировку на стороне клиента без повторного запроса данных в другой форме.

  • Запросить и вернуть JSON для больших наборов данных, но включить (ускользнутый) фрагмент HTML для каждой записи в записи JSON. Это означает большее время рендеринга и больше использования полосы пропускания, чем (2), но может уменьшить дублирование часто сложных HTML-рендеринга.

  • Запросить и вернуть Javascript и eval на стороне клиента. Это лучше всего подходит для взаимодействия, такого как скрытие, показ, перемещение и удаление. Он также может работать и для вставок, но часто тип (1) или (5) работает лучше для этого.

  • Запросить и вернуть Javascript и eval его клиентскую сторону, но включить экранированный HTML в Javascript, чтобы сервер выполнял рендеринг HTML.

Я, вероятно, чаще всего использую 5 и 1.

Ответ 2

Мне показалось бы, что было бы еще более сложной задачей выяснить, где на заднем сервере, который нужно будет изменить, когда будет изменена структура DOM или CSS.

Сохранение всего этого в одном месте (файл HTML), вероятно, является лучшей причиной для ограничения связи ajax с JSON.

Ответ 3

Как с JSON raw html вы все еще беспокоитесь, что содержимое безопасно, ведь JSON - это код JavaScript. Я полагаю, что если вы не доверяете источнику ваших данных HTML, тогда вы открыты для всех видов атак типа Cross Site Scripting. Рассмотрите отправку данных как JSON и используя библиотеку Javascript Templating, такую ​​как библиотека библиотеки UI Yahoo, см. http://developer.yahoo.com/yui/docs/YAHOO.lang.html#method_substitute то пусть Front End Guys поддерживают шаблоны.

Ответ 4

Я не уверен, что понимаю вопрос 100%... но...

Мы используем GWT и отправляем XML между клиентом и сервером. Я реализовал систему отображения XML с использованием генератора кода GWT, поэтому код для преобразования между объектами XML и JavaScript автоматически создается на основе самих объектов (используя аннотации в классах Java).

Отправка прямого HTML только делает ваше приложение менее способным, поскольку оно больше не может интерпретировать данные каким-либо образом, а просто обновляет экран. Это также усложняет серверную сторону, которая теперь должна генерировать HTML... Я бы серьезно избегал этой стратегии.

Ответ 5

У меня есть вид /task/action/parameter идиомы, идущей на стороне javascript. Мой бэкэнд строго возвращает данные, которые мне нужны в JSON, клиент (js) заботится о его отображении. Скажем, я загружаю эту страницу /#/item/product/5, javascript знает, что ей нужно вызвать объект "item", метод "продукт" с переданным в него параметром 5.

Это хорошо работает для ссылок на закладки, поэтому, когда кто-то решает пометить mysite.com/#/item/product/5 каждый раз, когда эта страница загружается, он точно знает, какой объект... метод для вызова.

Ответ 6

Я думаю, что это не большая разница в плане безопасности - вы можете анализировать небезопасные JSON, а также небезопасные HTML/JS.

Это больше похоже на правильное разбиение вашего приложения - если вы прямо вставляете HTML на свою страницу, вам нужно будет создать код на конкретном уровне на уровне бизнес-логики, что для моего впечатления не выгодно для чистых и легко заменяемых слоев.

Только мои 2 цента...

Ответ 7

Единственная причина, по которой я заинтересован в этом, - из-за огромной боли для разработчиков интерфейсов каждый раз, когда есть структура DOM/CSS, поэтому теперь вам нужно выяснить, где в процессе построения HTML-кода Javascript вам может потребоваться обновить.

Вы должны делать это неправильно.

Данные, возвращаемые из AJAX, должны быть только семантическими данными, то есть материал, который не изменяется, если изменяется только макет. Преобразование данных в DOM-манипуляцию лучше всего оставить для функции Javascript, определенной на самой главной странице.

Ответ 8

Я сделал это как комментарий, но я его подталкиваю.

JSON по своей сути безопасен, проблема в том, что делают с ним люди.

Использование eval для оценки - это проблема, а не формат, поскольку формат неявно ограничен спецификацией JSON. Поврежденный JSON может сделать eval небезопасным. Итак... не делай этого. Не используйте eval, используйте выделенный JSON-парсер.

Та же логика может быть применена к HTML. Обращайтесь с HTML как "данные", как просто XML, и обработайте его, а не просто слепо запечатывайте его на своих страницах.

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