Как создать независимый HTML-блок?

#javascript #html #css #iframe

#javascript #HTML #css #iframe

Вопрос:

Я хочу знать, есть ли какой-нибудь способ создать независимый HTML-блок.

Для получения дополнительных пояснений: моя проблема в том, что у меня есть веб-страница, на которой я разрешаю некоторым пользователям добавлять контент (может содержать HTML и CSS). Я разрешаю им добавлять свой контент внутри определенного блока, но иногда их контент может быть не чистым кодом и может содержать некоторые разделы без конца илидаже некоторые DIV заканчиваются без начального DIV, это иногда полностью искажает мою страницу

Есть ли какой-нибудь способ сделать так, чтобы их содержимое отображалось независимо от моего родительского div, чтобы сначала хорошо отображался мой div, а затем отображалось содержимое внутри него?

Прошу прощения за длинное сообщение. Спасибо за любую попытку помочь

Ответ №1:

иногда их содержимое может быть не чистым кодом и может содержать некоторые разделы без конца или даже некоторые разделы без начального раздела. Это иногда полностью искажает мою страницу

Самым простым решением для вас будет добавить представленный контент на вашу страницу внутри <iframe> . Таким образом, не имеет значения, является ли отправленный HTML недопустимым.

Если вам нужно беспокоиться о том, что пользователи могут отправлять вредоносный контент (например, JavaScript), проблема становится намного сложнее: вам нужно очистить HTML. Я не могу сказать вам, как это сделать, не зная, какой язык на стороне сервера вы используете.

Комментарии:

1. Привет, я использовал Iframe, и он отлично работал для меня. Я попробовал еще одну вещь, которая также в какой-то степени сработала для меня. Я взял отправленное содержимое (в действительном HTML) в DocumentFragment. Я подождал, пока не будет создан полный dom, и после этого я взял innerHTML DocumentFragment и поместил его в div, где я хочу отобразить его на странице. У меня это сработало, не искажая компоновку всей страницы. Правильный ли это подход?

2. Звучит неплохо. Я думаю DocumentFragment , что исправление ошибок браузера применяется к предоставленному HTML, поэтому должно быть сложно получить что-то, что приведет к разрыву страницы. Хотя я не очень хорошо знаком с DocumentFragment , так что не верьте мне на слово.

Ответ №2:

Моя проблема в том, что у меня есть веб-страница, на которой я разрешаю некоторым пользователям добавлять контент (может содержать HTML и CSS), я разрешаю им добавлять свой контент внутри определенного блока, но иногда их контент может быть не чистым кодом и может содержать несколько разделов без конца или даже некоторые DIV endбез начального DIV это иногда полностью искажает мою страницу

Если это проблема, которую вы пытаетесь решить, то наличие некоторой разметки, указывающей, что фрагмент кода является независимым, не поможет: они могут включать код «Конец независимого раздела» в HTML.

Если вы хотите поместить код на страницу, вам нужно проанализировать его, очистить (используя белый список), чтобы удалить все потенциально вредное, а затем сгенерировать чистую разметку из DOM.

Комментарии:

1. Либо почистить его, либо засунуть все это в iframe..? Возможно, в данном случае это не вариант?

Ответ №3:

вы могли бы использовать статические фреймы iframes. проверьте это http://www.samisite.com/test-csb2nf/id43.htm

Ответ №4:

Самый безопасный способ — ограничить теги, которые они могут отправлять, и проверить / очистить те, которые они делают, аналогично тому, как мы можем использовать разметку здесь.

Непроверенный HTML, введенный на вашу страницу, вызывает проблемы.

В противном случае старый добрый iframe сделает свое дело.

Ответ №5:

Хорошо, я верю, что вы можете что-то сделать, но это может потребовать некоторого времени. Вы можете использовать синтаксический анализатор, чтобы просмотреть пользовательский html, получить теги и их содержимое и воссоздать html, сделав его чистым.

Но, поскольку существует множество тегов, которые можно использовать, или даже придуманных тегов, вы можете ограничить теги, которые пользователь может использовать в своем html. Вы помещаете легенду с допустимыми тегами.

Есть несколько довольно хороших парсеров html для php, но они могут сломаться из-за очень плохого html-кода, поэтому я предлагаю вам просто воссоздать его на основе синтаксического анализа с ограниченным подмножеством допустимых тегов.

Я знаю, что это сложное / трудоемкое решение, но это то, что я имею в виду