позволяя пользователям добавлять заметки в формате html

Мы хотим разрешить пользователям нашего веб-приложения оставлять заметки в формате html.

На стороне клиента мы предоставляем им ckeditor [http://ckeditor.com/], который представляет собой редактор wisywig, который генерирует html, который затем отправляется на сервер через форму.

Затем мы хотим отобразить заметки, созданные пользователями, точно в том же формате, в котором они их отправили.

Мои опасения:

  1. Оставив в стороне атаки и плохие намерения, как я могу инкапсулировать заметку при отображении на сайте, чтобы a. Они не наследуют дизайн остальной части страницы b. Они не влияют на остальную часть страницы, например, случайно открывая и не закрывая тег или закрывая без открытия.

  2. Атаки с внедрением вредоносного кода

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

Возможные решения, которые я рассматриваю:

  1. В идеале я ищу способ инкапсулировать эти фрагменты пользовательского html, например: внутри этой области я показываю то, что вы отправили (рендеринг, а не исходный код), вы не можете влиять и не подвергаетесь влиянию кода на другие части страницы

В частности, мы подумали об отображении заметок внутри фреймов.

  1. Другим естественным направлением является анализ вставленного содержимого и удаление материала.

Любые входные данные приветствуются, и в основном:

  • Как я могу «инкапсулировать» вставленное содержимое, если могу?

  • Любые комментарии по направлению iframe

  • Должен ли я в любом случае анализировать содержимое? Что мне обязательно нужно убрать?


person shealtiel    schedule 27.05.2011    source источник


Ответы (2)


Как я могу "инкапсулировать" вставленное содержимое, если могу?

Правда в том, что если вы не «исправьте» их код (с помощью какой-либо проверки), у вас возникнут проблемы (например, сломанные элементы div и т. д.). Я не понимаю, как можно инкапсулировать HTML FROM HTML. Однако я бы позволил им выделять контент жирным шрифтом, курсивом, центрировать и т. Д.;

Любые комментарии относительно направления iframe

Лично я бы не пошел по этому пути, новая банка червей для безопасности, а не «чистый» способ сделать это.

Должен ли я в любом случае анализировать содержимое? Что мне обязательно нужно убрать?

Да не ленитесь, некоторые разработчики всегда говорят "ну мне это не нужно, это внутреннее", а потом оно становится внешним, и в этот момент оно настолько большое, что ТОЛЬКО полный переписывание исправит его, и оно продолжает пыхтеть, пока что-нибудь не сломается, затем дерьмо попадает в вентилятор, и большой босс кричит, почему это не было сделано. Короче говоря.

Да, вам нужно разобрать/подтвердить/проверить все ваши данные, будь то внутренние или внешние. Все, кроме этого, просто лень.

В заключение я бы сделал это с помощью редактора, подобного здесь, на SO, который допускает только некоторые типы выборочного форматирования. В конце концов, сломанный <b> не убьет весь ваш макет, а <div>...

person Jakub    schedule 27.05.2011
comment
новая банка червей для безопасности, а не «чистый» способ сделать это, можете ли вы объяснить оба эти момента? Вы говорите вообще не использовать iframe? - person shealtiel; 27.05.2011

Форматирование уценки

Вы можете использовать точно такое же промежуточное решение, которое этот сайт (StackOverflow) использует в своем пользовательском контенте (вопросы, ответы, комментарии).

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

Полное руководство: https://www.markdownguide.org/cheat-sheet.

person DavidTaubmann    schedule 01.11.2018