Ограничить Javascript в подразделе HTML, содержащем текстовый редактор
Я работаю над унаследованным веб-приложением, в котором используется как редактор текстовых заметок Summernote, который может сохранять отформатированные заметки на наш сервер, так и множество встроенных Javascript.
Summernote может разрешить написание HTML/CSS/JS через представление "код", но, похоже, не имеет встроенной поддержки для предотвращения XSS. Если вы, например, зайдете на их домашнюю страницу, перейдите в просмотр кода для редактора и напишите <script>alert(0)</script>
и верните его обратно в текстовое представление, он выполнит скрипт. Мы хотим, чтобы пользователи могли делать такие вещи, как жирный контент, вставлять гиперссылки и изображения и т. Д., Но без JS или, возможно, даже CSS.
Мы только что обнаружили, что разработчик, который изначально реализовал защиту XSS для этих редакторов в приложении, проделал небольшую работу, и теперь пытается убедиться в этом. До сих пор, кажется, мои варианты: (а) создание / поиск белого списка, который будет анализировать HTML Summernote и разрешать только определенные элементы HTML в поле; и / или (b) реализация заголовков CSP и перемещение всего встроенного JS / CSS в отдельные файлы.
Учитывая, что только эти редакторы должны иметь возможность возвращать действительный HTML пользователям, остальная часть сайта мы можем и полностью очищаем содержимое, возможно ли отключить встроенный JS / CSS только в разделе HTML-страницы (т.е. область, в которую мы загружаем содержимое редактора)? Или это не вариант / возможность быть подверженным обходным путям?
Редактировать: просто как примечание, я признаю, что форматированный текстовый редактор не может предотвратить XSS, если мы решили сохранить контент на сервер, так как он работает на стороне клиента. Я имел в виду, что не могу найти ресурсы / предложения, касающиеся белых списков HTML, или пример очистки для различных серверов через их сайт.
Редактировать 2: Определенно будет реализовывать какой-то белый список, чтобы быть на безопасной стороне (возможно, CSP, но рефакторинг будет головной болью), но все же хочу знать, возможно ли это: т.е. между двумя разделами HTML, это Можно ли заблокировать все встроенные JS & CSS?
1 ответ
Как я читаю в этой заметке https://github.com/summernote/summernote/issues/1617
Вы должны проверить на сервере в любом случае. Это смешное поведение, я согласен, но пользователю разрешено делать все что угодно в своем браузере. Единственное, что вы (вы, а не этот пакет) должны позаботиться о том, чтобы не позволить пользователям хранить вредоносный код в вашей базе данных (который впоследствии отображается в браузере других пользователей)
Итак, в основном вы отвечаете за то, что пользователи пытаются поместить в вашу базу данных или веб-страницу. Так что вам нужно:
- Выполните проверку содержимого на стороне сервера (удалите
<script>
теги с контентом, например) - Реализация санации размера клиента (она не мешает вам выполнять проверку на стороне сервера), чтобы помочь пользователю уведомить его, что ему не разрешено включать сценарии. Это может быть сделано при переключении между просмотром кода и предварительным просмотром (см. Событие Summernote для перехода от представления кода к редактору)