Как безопасно использовать fckEditor без риска создания межсайтовых сценариев?

StackOverflow https://stackoverflow.com/questions/65734

  •  09-06-2019
  •  | 
  •  

Вопрос

Эта ссылка описывает эксплойт в моем приложении с помощью fckEditor:http://knitinr.blogspot.com/2008/07/script-exploit-via-fckeditor.html

Как мне защитить свое приложение, продолжая использовать fckEditor?Это конфигурация fckEditor?Это какая-то обработка, которую я должен выполнить на стороне сервера после того, как получу текст из fckEditor?

Это загадка, потому что fckEditor ИСПОЛЬЗОВАНИЕ html для его форматирования, поэтому я не могу просто кодировать HTML при отображении текста.

Это было полезно?

Решение

Санировать html на стороне сервера, другого выбора нет.Для PHP это было бы HTML-очиститель, для .NET я не знаю.Дезинфицировать HTML сложно — недостаточно удалить теги скриптов, нужно также следить за обработчиками событий on* и даже больше, например, благодаря глупости IE.

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

Другие советы

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

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


Может быть, вы можете использовать Библиотека Microsoft для защиты от межсайтовых сценариев.Образцы на MSDN

Это какая-то обработка, которую я должен выполнить на стороне сервера после того, как получу текст из fckEditor?

Именно так.У StackOverflow на ранних этапах также были проблемы, связанные с этим.Самый простой способ решить эту проблему — использовать библиотеку HTML для анализа ввода пользователя, а затем экранировать любые теги, которые вам не нужны в выходных данных.Сделайте это как этап постобработки при печати на странице — данные в базе данных должны быть точно такими же, как те, которые ввел пользователь.

Например, если пользователь вводит <b><script>evil here</script></b>, ваш код переведет его в <b>&lt;script&gt;evil here&lt;/script&gt;</b> перед рендерингом страницы.

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

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

Эти теги:<strong> <em> <u> <ol> <ul> <li> <p> <blockquote> <font> <span>.

Только тег шрифта должен иметь атрибуты «лицо» и «размер».Тег span должен иметь только атрибут class.

Для этих тегов нельзя допускать никаких других атрибутов.

Я понимаю, что НЕТ.Мне не хватает ДО.

Является ли использование FCKEditor обязательным требованием или вы можете использовать другой редактор/язык разметки?Я советую использовать Markdown и WMD Editor, тот же язык, который используется в StackOverflow.В библиотеке Markdown для .NET должна быть возможность экранировать все теги HTML — обязательно включите ее.

XSS — сложная вещь.Предлагаю почитать:

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

Я думаю, что проблема, поднимаемая некоторыми, заключается не в том, что Fckeditor кодирует только несколько тегов.Это наивное предположение, что злой пользователь будет использовать Fckeditor, чтобы писать свои злонамеренные действия.Инструментов, позволяющих вручную изменять ввод, множество.

Я отношусь ко всем пользовательским данным как к испорченным;и используйте Markdown для преобразования текста в HTML.Он очищает любой HTML-код, обнаруженный в тексте, что уменьшает злонамеренность.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top