Как использовать fckEditor безопасно, без риска межсайтового скриптинга? - PullRequest
3 голосов
/ 15 сентября 2008

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

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

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

Ответы [ 7 ]

7 голосов
/ 15 сентября 2008

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

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

4 голосов
/ 15 сентября 2008

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

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


Может быть, вы можете использовать Microsoft Anti-Cross Site Scripting Library . Образцы на MSDN

2 голосов
/ 29 мая 2009

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

Эти теги: .

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

Никакие другие атрибуты не должны быть разрешены для этих тегов.

2 голосов
/ 15 сентября 2008

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

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

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

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

0 голосов
/ 23 января 2010

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

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

0 голосов
/ 28 января 2009

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

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

0 голосов
/ 15 сентября 2008

Я понимаю ДОНТЫ. Мне не хватает DO.

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

...