Как безопасно использовать fckEditor без риска создания межсайтовых сценариев?
Вопрос
Эта ссылка описывает эксплойт в моем приложении с помощью 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><script>evil here</script></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-код, обнаруженный в тексте, что уменьшает злонамеренность.