2016-12-05 3 views
0

Как предотвратить вредоносное использование пользователем атаки XSS, когда ему разрешено использовать теги HTML, т. Е. В элементе textarea? Я не собираюсь снимать все теги или избегать их, поэтому я не могу использовать {{ }}.Laravel: дезинформировать ввод пользователя в XSS, когда HTML-теги разрешены

Кстати: есть еще одна опасная ситуация, когда даже {{ }} это не очень хорошая идея. Пожалуйста, рассмотрите this link. Есть ли способ разрешить пользователю использовать теги html, но не позволяет ему совершать атаку XSS?

ответ

1

Редакторы html на стороне клиента, вероятно, являются самыми большими проблемами при попытке предотвратить XSS. На самом деле многие сторонние компоненты редактора не делают этого.

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

Многие, вероятно, утверждают, что единственным правильным местом для этого является серверная сторона. Тем не менее, иногда существует одна оговорка в том, что может или не может применяться к вашей учетной записи. Если на клиентском html-редакторе есть предварительный просмотр, он также должен быть дезинфицирован для предотвращения DOM XSS, и предварительный просмотр часто не отправляется на сервер (отредактированный контент сразу отображается на клиенте без серверного обратного перехода). Хотя это XSS с меньшим риском, он определенно является тем, который вам нужно предотвратить, а отладка на стороне сервера здесь не очень хороша.

Возможно, вы захотите использовать дезинфицирующее средство на стороне клиента, кроме или вместо серверного. Одним из примеров этого является дезинфицирующее средство на стороне клиента в Google Caja (это гораздо более масштабный проект, я говорю только об их sanitizer in Javascript), а также есть DOMPurify для другого примера на клиенте. Они могут быть подключены к любому компоненту редактора html на стороне клиента для дезинфекции любого кода до его фактического отображения, тем самым эффективно устраняя XSS.

Риск любой дезинфекции заключается в том, что дезинфицирующее средство пропускает что-то, и разрешен вектор атаки для XSS. Это, в основном, вещь доверия, многие люди используют Caja, например, она была разработана Google, поэтому у вас может быть некоторая уверенность в том, что она достаточно хорошая. Насколько это достаточно для вас, зависит от вашего точного сценария, аппетита к риску и т. Д.

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

Смежные вопросы