2010-11-29 2 views
1

Я строю страницу в asp.net, которая будет использовать крошечный mce для предоставления текстового редактора на странице. Tiny mce выводит богатый текст как html, который я хотел бы сохранить в базе данных. Затем, на более поздний срок, я хочу вытащить HTML из базы данных и отобразить его на странице.Хранение HTML в db при избегании постоянной xss/sql-инъекции

Я обеспокоен тем, что вредоносные теги html, js в мою базу данных будут выведены позже.

Может ли кто-нибудь пройти меня через какой-то момент в моем процессе, я должен кодировать/декодировать html и т. Д., Чтобы предотвратить постоянную атаку xss и атаку вторжения sql?

ответ

2

Мы используем Microsoft Web Protection Library, чтобы очистить любой потенциально опасный HTML на пути. Что я подразумеваю под «на пути в» - когда страница отправляется на сервер, мы очищаем HTML с помощью MS WPL и получаем результаты этого и бросить это в базу данных. Даже не позволяйте никаким плохим данным попасть в вашу базу данных, и вы будете более безопасными для этого. Что касается кодирования, вы не захотите вмешиваться в кодирование/декодирование HTML - просто возьмите все, что находится в вашем tinyMCE-элементе управления, вычистите его и сохраните. Затем на странице дисплея просто напишите, как это существует в вашей базе данных, в литеральный элемент управления или что-то в этом роде, и вы должны быть хорошими.

Я считаю, что Microsoft.Security.Application.Sanitizer.GetSafeHtmlFragment(input) будет делать именно то, что вы хотите здесь.

+0

Спасибо Брэндон, я уже шел по этому пути, и ваше мнение помогло подтвердить мне, что это был лучший подход. – user263097 2010-11-29 21:55:21

0

Эти администраторы, которые используют RTE? Если так, я бы не стал беспокоиться об этом.

Если нет, то я не рекомендую использовать WYSIWYIG, например TinyMCE. Вам придется на самом деле искать вредоносный ввод, и, скорее всего, вы будет пропустите некоторые. Поскольку RTE выводит простой HTML, который, как я предполагаю, вы хотите, вы не можете просто преобразовать объекты HTML. Это вроде бы устранит весь смысл использования TinyMCE.

Остановка SQL-инъекции выполняется в бэкэнд при вставке данных в базу данных. Вы захотите использовать параметризованный запрос или избежать ввода (не знаете, как в ASP.NET, я парень PHP.)

0

Не могли бы вы использовать богатый текстовый редактор, который использует BBCode и на сервере, избегать всего, что нужно сбежать, и впоследствии превратить BBCode в HTML-разметку?

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

0

Есть два подхода, вы, вероятно, использовать первый

1) вы будете составлять список разрешенных тегов и бежать/стрип остальные. У TinyMCE есть определенная функция, которая запрещает пользователю использовать некоторые теги .. (vut это только клиентская сторона, вы должны проверить ее на сервере)

2) вы будете кодировать допустимые теги по-разному ([b] полужирный [/ b]), чем вы могли бы сэкономить все на БД и пока рендеринг бежать все и чем интерпретировать ваши специальные теги

Третий подход: если пользователь является администратором (тот, кто должен знать, что он делает), чем вы можете оставить все без побег ... он ответственный за свои ошибки ....

Смежные вопросы