Обработка Rich Text в приложении MVC - PullRequest
5 голосов
/ 15 июля 2009

Каковы лучшие практики работы с форматированным текстом в веб-приложении? Я не хочу оставлять себя уязвимым для скриптовых атак. Должны ли данные кодироваться, поступая в базу данных, а затем декодироваться при отображении обратно пользователю? Какой-нибудь совет по форматированию текстового редактора, который обрабатывает такие вещи, как удаление тегов сценария или кодирование введенной разметки?

Ответы [ 2 ]

2 голосов
/ 15 июля 2009

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

РЕДАКТИРОВАТЬ : обратите внимание, что если вы разрешаете гиперссылки или изображения, вы должны проверить теги src и href. Я бы порекомендовал проанализировать его, используя System.Uri, ограничив схему http и, возможно, доменом вашего сайта (в зависимости от того, что вы хотите, чтобы ваши пользователи могли делать).

Подобные вещи были сделаны раньше; погуглите их.

РЕДАКТИРОВАТЬ : Например, см. этот вопрос


2 и РЕДАКТИРОВАТЬ :

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

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

Однако, вероятно, будет хорошей идеей запустить его через стандартный синтаксический анализатор XML, отклонить любые входные данные, которые не анализируются, и использовать форматированный XML из синтаксического анализатора (как я уже упоминал выше)


3 rd РЕДАКТИРОВАТЬ :

Есть много текстовых редакторов; для MVC, я бы порекомендовал FCKEditor . Он будет избегать ввода для вас, но вы должны не полагаться на него исключительно, поскольку злоумышленник может отключить JavaScript или подделать свой собственный HTTP-запрос. (Вам все еще нужно проверить HTML на сервере). Есть много богатых редакторов для веб-форм (которые, я предполагаю, выполняют проверку на стороне сервера); для MVC их пока нет (*)

0 голосов
/ 15 июля 2009

Лучший вариант - это кодировать данные, которые отправляются пользователю, а не кодировать их в базе данных. Насколько я знаю, asp.net предотвращает атаки сценариев путем проверки ввода.

...