что нужно проверить при сохранении данных html пользователя ckeditor в базу данных - PullRequest
1 голос
/ 07 августа 2011

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

Что мне нужно беспокоиться в отношении того, что публикуют люди.Нужно ли добавлять какие-либо проверки на интерфейс или бэкэнд, чтобы убедиться, что они не публикуют опасные сценарии и т. Д..

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

Ответы [ 2 ]

2 голосов
/ 07 августа 2011

Насколько я знаю, ckeditor не предоставляет никакой встроенной защиты xss (вы всегда должны проверять такие вещи на стороне сервера).В дополнение к ответу Дарина Димитрова я могу сказать, что в моем недавнем проекте мне нужно отображать вводимые пользователем данные в виде html, а не кодировать их.Если вы сталкиваетесь с подобной ситуацией (и вы почти наверняка есть - обычно нет смысла использовать ckeditor и игнорировать формат) - посмотрите на: http://refactormycode.com/codes/333-sanitize-html Если это ваш случай - просто продезинфицируйте html, используя метод Sanitize из поста, итогда вы можете отобразить его как есть.

2 голосов
/ 07 августа 2011

Нужно ли добавлять какие-либо проверки на интерфейс или бэкэнд, чтобы убедиться, что они не публикуют опасные сценарии и т. Д.

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

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

Для бритвы:

@...

Для веб-форм (ASP.NET 4.0)

<%: ...

Для веб-форм (до ASP.NET 4.0)

<%= Html.Encode(... 

Или для всего вышеперечисленного:

Html.DisplayFor(x => x.SomePropertyOftheViewModel)

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

Параметризованные запросы для хранения данных (только если вы используете реляционную базу данных) и кодирование HTML для отображения обратно.

Вы также можете найти следующую запись в блоге полезно о библиотеке Microsoft Anti-Xss .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...