Насколько опасный это, отправляют HTML в Ajax в противоположность отправке JSON и созданию HTML? [дубликат]

Вы можете гарантировать порядок строк, включив предложение ORDER BY, которое включает в себя все столбцы, необходимые для уникальной идентификации строки. Фактически, это единственный способ гарантировать порядок от повторных вызовов оператора SELECT, даже если в базе данных ничего не изменилось. Без однозначного предложения ORDER BY ядро ​​базы данных может свободно возвращать строки в любом удобном для них порядке в данный момент.

Рассмотрим простой пример:

Вы являетесь единственным пользователем базы данных. Механизм базы данных имеет кэш строк в памяти, который может содержать последние 1000 найденных строк. Сервер базы данных был только что перезапущен, поэтому кеш пуст. Вы SELECT * FROM tablename и ядро ​​базы данных извлекаете 2000 строк, последние 1000 из которых остаются в кэше. Затем вы делаете SELECT * FROM tablename снова. Механизм базы данных проверяет кэш и находит 1000 строк из предыдущего запроса, поэтому он немедленно возвращает их, потому что при этом ему больше не придется нажимать на диск. Затем он приступает к поиску других 1000 строк. Конечным результатом является то, что 1000 строк, которые были возвращены последними для начального SELECT, фактически возвращаются первыми для последующего SELECT.

11
задан Community 23 May 2017 в 12:34
поделиться

8 ответов

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

  1. Запросите и возвратите HTML для быстрых отрывков, затем используйте клиентский (статический) JavaScript для вставки их. Большой для аварийных сообщений.

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

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

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

  5. Запросите и возвратите JavaScript, и eval это клиентский, но включает, вышел из HTML в JavaScript, таким образом, сервер делает рендеринг HTML.

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

11
ответ дан 3 December 2019 в 09:21
поделиться

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

Хранение всего этого в одном месте (файл HTML) является, вероятно, лучшей причиной ограничить ajax коммуникацию JSON.

1
ответ дан 3 December 2019 в 09:21
поделиться

С обоими необработанный HTML JSON, который Вы все еще имеете, волнует содержание, являющееся безопасным, после того, как весь JSON является кодом JavaScript. Я предполагаю, не доверяете ли Вы источнику своих данных HTML затем, Вы открыты для всех видов Атак с использованием кросс-сайтовых сценариев. Рассмотрите отправку данных как JSON и пользование библиотекой Javascript Templating как та в библиотеке Yahoo UI, см., что http://developer.yahoo.com/yui/docs/YAHOO.lang.html#method_substitute затем позволяет Парням Фронтэнда поддержать шаблоны.

0
ответ дан 3 December 2019 в 09:21
поделиться

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

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

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

0
ответ дан 3 December 2019 в 09:21
поделиться

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

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

0
ответ дан 3 December 2019 в 09:21
поделиться

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

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

Просто мои 2 цента...

0
ответ дан 3 December 2019 в 09:21
поделиться

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

Необходимо делать его неправильно.

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

0
ответ дан 3 December 2019 в 09:21
поделиться

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

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

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

Та же логика может быть применена к HTML. Относитесь к HTML как к «данным», как к простому XML, и обрабатывайте его, а не просто слепо прикрепляйте к своим страницам.

Намного труднее ускользнуть от этого пути.

0
ответ дан 3 December 2019 в 09:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: