Хранение HTML в БД, избегая постоянного внедрения xss / sql - PullRequest
1 голос
/ 29 ноября 2010

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

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

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

Ответы [ 4 ]

2 голосов
/ 29 ноября 2010

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

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

0 голосов
/ 29 ноября 2010

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

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

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

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

0 голосов
/ 29 ноября 2010

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

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

0 голосов
/ 29 ноября 2010

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

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

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

...