Принудительное закрытие тегов в динамическом тексте - PullRequest
3 голосов
/ 23 июня 2010

Во многих местах на многих моих сайтах пользователям разрешается вводить форматированный текст с помощью WYSIWYG или обычного текста с тегами.Естественно, такой ввод очищается от угроз безопасности, но он не лишен тегов и не полностью закодирован.Что-то вроде <p>hello world</p> заканчивается тем, что возвращается к конечному пользователю как <p>hello world</p>.

Большинство WYSIWYG достаточно умны, чтобы очистить XML перед передачей содержимого в форму, но ручные запросы POST, текстовые области не-WYSIWYG и пользователи не-JS не будут подвергаться этому запросуправильное направление.Так что ничто не мешает пользователю ввести <a href="/">, превратив оставшуюся часть страницы в ссылку.

Как лучше всего с этим справиться?

Ответы [ 2 ]

2 голосов
/ 23 июня 2010

Что бы пользователь не предоставил, проанализируйте его с помощью HTML-парсера. Санируйте его, пока он DOM, затем сериализуйте DOM обратно в HTML, взяв содержимое элемента body (парсер создаст его при необходимости) как строку, отправленную обратно конечному пользователю. Все необходимые элементы будут иметь закрывающие теги.

0 голосов
/ 23 июня 2010

Если пользователь собирается отправить текст с незакрытыми тегами, было бы разумно выдать предупреждающее сообщение.

Если пользователь хочет опубликовать один тег <br>, он должен быть закрыт как <br />. Или должен быть закрыт с конечным тегом отдельно </br>.

...