Вы должны выбрать белый список известных тегов и атрибутов, проанализировать вводимые пользователем данные в виде XML и удалить все теги или атрибуты, которых нет в белом списке.
РЕДАКТИРОВАТЬ : обратите внимание, что если вы разрешаете гиперссылки или изображения, вы должны проверить теги src
и href
. Я бы порекомендовал проанализировать его, используя System.Uri
, ограничив схему http
и, возможно, доменом вашего сайта (в зависимости от того, что вы хотите, чтобы ваши пользователи могли делать).
Подобные вещи были сделаны раньше; погуглите их.
РЕДАКТИРОВАТЬ : Например, см. этот вопрос
2 и РЕДАКТИРОВАТЬ :
Вы не должны кодировать данные, прежде чем поместить их в базу данных. Пока вы используете параметры (а если нет, то вы действительно должны), база данных не будет зависеть от того, что вы в нее вставите.
Если ваша входная санация безопасна (см. Выше), это не будет иметь никакого значения, если вы кодируете ее и декодируете в пути, а если санация не безопасна, кодирование не поможет.
Однако, вероятно, будет хорошей идеей запустить его через стандартный синтаксический анализатор XML, отклонить любые входные данные, которые не анализируются, и использовать форматированный XML из синтаксического анализатора (как я уже упоминал выше)
3 rd РЕДАКТИРОВАТЬ :
Есть много текстовых редакторов; для MVC, я бы порекомендовал FCKEditor . Он будет избегать ввода для вас, но вы должны не полагаться на него исключительно, поскольку злоумышленник может отключить JavaScript или подделать свой собственный HTTP-запрос. (Вам все еще нужно проверить HTML на сервере). Есть много богатых редакторов для веб-форм (которые, я предполагаю, выполняют проверку на стороне сервера); для MVC их пока нет (*)