Ограничить Javascript в подразделе HTML, содержащем текстовый редактор - PullRequest
0 голосов
/ 05 сентября 2018

Я работаю над унаследованным веб-приложением, в котором используется как расширенный текстовый редактор Summernote , который может сохранять отформатированные заметки на наш сервер, так и множество встроенных Javascript.

Summernote может разрешать написание HTML / CSS / JS через представление «код», но, похоже, не имеет встроенной поддержки для предотвращения XSS. Если вы, например, зайдете на их домашнюю страницу, перейдите к просмотру кода для редактора и напишите <script>alert(0)</script> и вернете его обратно к просмотру текста, он выполнит скрипт. Мы хотим, чтобы пользователи могли делать такие вещи, как жирный контент, вставлять гиперссылки и изображения и т. Д., Но без JS или, возможно, даже CSS.

Мы только что обнаружили, что разработчик, который изначально реализовал защиту XSS для этих редакторов в приложении, сделал немного слабую работу, и теперь пытается убедиться в этом. Пока что, похоже, у меня есть варианты: (a) создание / поиск белого списка, который будет анализировать HTML Summernote и разрешать только определенные элементы HTML в поле; и / или (b) реализация заголовков CSP и перемещение всех встроенных JS / CSS в отдельные файлы.

Учитывая, что только эти редакторы должны иметь возможность возвращать действительный HTML пользователям, на остальной части сайта мы можем и полностью очищаем контент, возможно ли отключить встроенный JS / CSS только в разделе HTML-страницы (Т.е. область, в которую мы загружаем содержимое редактора)? Или это не вариант / возможность быть подверженным обходным путям?

Редактировать : Так же, как примечание, я признаю, что текстовый редактор не может предотвратить XSS, если мы решили сохранить контент на сервер, так как он работает на стороне клиента. Я имел в виду, что не могу найти ресурсы / предложения относительно белых списков HTML или пример очистки для различных серверов через их сайт.

Редактировать 2 : Определенно будет реализовывать какой-то белый список, чтобы быть на безопасной стороне (возможно, CSP также, но рефакторинг будет головной болью), но все же хотите знать, возможно ли это Т.е. между двумя разделами HTML, возможно ли заблокировать все встроенные JS & CSS?

1 Ответ

0 голосов
/ 05 сентября 2018

Как я читаю в этой заметке https://github.com/summernote/summernote/issues/1617

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

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

  • Выполнить проверку содержимого на стороне сервера (например, удалить теги <script> с содержимым)
  • Реализация санации размера клиента (это не мешает вам выполнять проверку на стороне сервера), чтобы помочь пользователю уведомить его, что ему не разрешено включать скрипты. Это может быть сделано при переключении между представлением кода и предварительным просмотром (см. Событие Summernote для переключения из представления кода в редактор )
...