CMS DataLife Engine - Система управления сайтами

Sign in to follow this  
Alex-GR

HTML Purifier удаляет теги [thumb], [img] и т. д.

Recommended Posts

HTML Purifier удаляет теги [thumb][/thumb] в такой конструкции:

<figure>
[thumb=|Подпись.]https://site.ru/uploads/posts/2019-10/ris.jpg[/thumb]
<figcaption>Подпись рисунка.</figcaption>
</figure>

Остается:

<figure>
<figcaption>Подпись рисунка.</figcaption>
</figure>

Причем, удаляет thumb только тогда, когда он обернут тегом figure. Если обернуть div-вом - не удаляет.
Как заставить HTML Purifier правильно обрабатывать теги [thumb], и т. д, обернутые в тег figure?

Share this post


Link to post
Share on other sites

Писать нужно в данном случае HTML теги для картинки, а не ББ теги. HTML Purifier проверяет валидность HTML кода, а таком смешанном виде он не валиден. Поэтому нужно использовать не смешанный код, а полностью чистый HTML код.

Share this post


Link to post
Share on other sites
В 21.10.2019 в 13:37, celsoft сказал:

Писать нужно в данном случае HTML теги для картинки, а не ББ теги. HTML Purifier проверяет валидность HTML кода, а таком смешанном виде он не валиден. Поэтому нужно использовать не смешанный код, а полностью чистый HTML код.

Если мне нужно вставить увеличивающееся по клику изображение - я должен писать HTML код этой конструкции? С

<a class="highslide" ... изображение ... и так далее?

А вы не пробовали это сделать? Froala Editor не даст этого сделать - добавит не закрытый <a class="highslide" ...

Так что это не выход.

И потом, почему в тегах div я могу вставлять теги thumb, а в тегах figure - нет?

Это явный баг... И решается он 1 строчкой в плагине (уже нашел решение).

Было бы неплохо, если бы в следующих резах поправили его...

Share this post


Link to post
Share on other sites
15 часов назад, Alex-GR сказал:

Если мне нужно вставить увеличивающееся по клику изображение - я должен писать HTML код этой конструкции? С


<a class="highslide" ... изображение ... и так далее?

Да.

 

15 часов назад, Alex-GR сказал:

А вы не пробовали это сделать? Froala Editor не даст этого сделать - добавит не закрытый <a class="highslide" ...

Так что это не выход.

Какой незакрытый класс? Все в коде который предназначен для показа уменьшенной копии с увеличением корректно закрыто и валидно. Поэтому вы вставляете некорректный код видимо. Более того редактор Froala Editor сам вставляет картинки именно в виде HTML может, а использовать BB теги или HTML для вставки картинок, указывается в настройках DLE в админпанели. Поэтому утверждать что Froala Editor не поддерживает вставку в виде HTML для уменьшенных картинок некорректно. Таких проблем в DLE нет.

 

15 часов назад, Alex-GR сказал:

И потом, почему в тегах div я могу вставлять теги thumb, а в тегах figure - нет?

Это явный баг...

Потому что изучите HTML стандарты. В div может быть любой обычный текст, а в figure нет. Поэтому никакого бага тут нет. DLE проверяет валидность HTML кода, что является основой в безопасности скрипта и вашего сайта в целом.

 

15 часов назад, Alex-GR сказал:

И решается он 1 строчкой в плагине (уже нашел решение).

Было бы неплохо, если бы в следующих резах поправили его...

Решать нужно правильно и корректно, как вам и написали, а не делать дыру в безопасности сайта. Что вы и успешно сделали своей строчкой в плагине.

Share this post


Link to post
Share on other sites
5 часов назад, celsoft сказал:

Какой незакрытый класс? Все в коде который предназначен для показа уменьшенной копии с увеличением корректно закрыто и валидно. Поэтому вы вставляете некорректный код видимо. Более того редактор Froala Editor сам вставляет картинки именно в виде HTML может, а использовать BB теги или HTML для вставки картинок, указывается в настройках DLE в админпанели. Поэтому утверждать что Froala Editor не поддерживает вставку в виде HTML для уменьшенных картинок некорректно. Таких проблем в DLE нет.

Да, здесь я неправ - когда тестировал вставку HTML кода увеличивающегося по клику изображения, забыл закрывающий тег </a>, а редактор его вставлял неправильно.

5 часов назад, celsoft сказал:

Потому что изучите HTML стандарты. В div может быть любой обычный текст, а в figure нет. Поэтому никакого бага тут нет. DLE проверяет валидность HTML кода, что является основой в безопасности скрипта и вашего сайта в целом.

Давайте посмотрим на эту страничку: https://developer.mozilla.org/ru/docs/Web/HTML/Element/figure

HTML-элемент <figure> (Иллюстрация с необязательной подписью) представляет самостоятельный контент, часто с подписью (заголовком), которая указывается с помощью элемента (<figcaption>). Диаграмма и её подпись представляет собой единое целое.

Категории контента:

Основной поток, секционный корень, явный контент

Разрешённое содержимое:

Элемент <figcaption> за которым следует основной поток; или поточный контент за которым следует элемент <figcaption>; или поточный контент.

 

Читаем определение основного потока: https://developer.mozilla.org/ru/docs/Web/Guide/HTML/Content_categories#Основной_поток

Основной поток

Элементы основного потока обычно содержат текст и встроенный контент.

HTML стандарты говорят о том, что в теге <figure> может быть текст.

 

Идем дальше. Версия DLE 13.3. Установлена "с нуля".

<figure>
    <a itemprop="image" itemscope itemtype="https://schema.org/ImageObject" itemprop="url contentUrl" class="highslide" href="https://site.ru/uploads/boxsmall.jpg" target="_blank">
	<img itemprop="url contentUrl" src="https://site.ru/uploads/boxsmall.jpg" alt="Принцип работы советника Setka TLP." class="fr-fic fr-dii">
	<meta itemprop="width" content="300">
	<meta itemprop="height" content="411">
    </a>
    <figcaption>Подпись к картинке.</figcaption>
</figure>

Это валидный код? Теги meta уже вырежет парсер  редактора Froala Editor. Нужно настраивать редактор. Или можно вставить изображение в тегах  thumb, а в парсере DLE переписать код парсинга тега thumb так, чтобы он автоматом добавлял микроразметку к изображению. И не расписывать вручную код каждой картинки, которых на сайте может быть тысячи.

5 часов назад, celsoft сказал:

Решать нужно правильно и корректно, как вам и написали, а не делать дыру в безопасности сайта. Что вы и успешно сделали своей строчкой в плагине.

О какой дыре в безопасности идет речь? Если в файле engine/classes/parse.class.php поменять код:

$def->addElement('figure', 'Block', 'Optional: (figcaption, Flow) | (Flow, figcaption) | Flow', 'Common');
на
$def->addElement('figure',   'Block', 'Flow', 'Common');

Если я чего то не понимаю - объсните конкретней, а не кидайтесь громкими беспочвенными фразами.

 

И еще момент. Редактор Froala Editor к каждому изображению добавляет класс.

Объясню подробней. Вствляем 3 изображения в полную новость:

<img src="http://site.ru/uploads/boxsmall.jpg" class="fr-fic fr-dii">
<img src="http://site.ru/uploads/boxsmall.jpg" class="fr-fic fr-dii">
<img src="http://site.ru/uploads/boxsmall.jpg" class="fr-fic fr-dii">

Пока все правильно - редактор добавил к каждому изображению сласс fr-fic fr-dii. Класс fr-dii предназначен для выравнивания по центру, класс fr-fil - выравнивание слева, а класс fr-fir - справа.

Теперь встроенными средствами выравниваем второе изображение справа, а третье - слева. И получаем код:

<img src="http://site.ru/uploads/boxsmall.jpg" class="fr-fic fr-dii">
<img src="http://site.ru/uploads/boxsmall.jpg" class="fr-fic fr-dii fr-fir">
<img src="http://site.ru/uploads/boxsmall.jpg" class="fr-fic fr-dii fr-fil">

Редактор не удаляет класс fr-dii, а добавляет классы fr-fil и fr-fir к нему. Не уверен, что это правильно.

Edited by Alex-GR

Share this post


Link to post
Share on other sites
2 часа назад, Alex-GR сказал:

О какой дыре в безопасности идет речь? Если в файле engine/classes/parse.class.php поменять код:

Если я чего то не понимаю - объсните конкретней, а не кидайтесь громкими беспочвенными фразами.

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

 

2 часа назад, Alex-GR сказал:

Теги meta уже вырежет парсер  редактора Froala Editor.

А мета только для микроразметки используется? Нет. Это управляющий важной информацией код, влияющий на кодировку, на метатеги страницы, и т.д. И его использование просто в тексте новости небезопасно, поэтому его не не может быть, как того же JS. Опасность для сайта не только воровство вашего пароля, но понижение его ранжирования и изменение кодировки и влияние на отображение. А это все может делать тег <meta>

 

Для подобных опасных тегов, при условии что только администратор ведет сайт и он берет на себя полную ответственность существует специальное доп. поле в типом "без фильтрации"

  • Upvote 1

Share this post


Link to post
Share on other sites
17 минут назад, celsoft сказал:

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

Конечно не даете - для данного случая их просто нет. Если внимательно посмотреть вот на эту часть настроек:

Optional: (figcaption, Flow) | (Flow, figcaption) | Flow

то мы увидим, что для тега figure разрешены или потомки figcaption, Flow, или потомки Flow, figcaption, или потомки Flow.

 

Открываем официальный сайт HTML Purifier  с примерами http://htmlpurifier.org/docs/enduser-customize.html и читаем:

Цитата

Flow - Any number of inline elements, block elements and text, like div

Другими словами, возможны 3 варианта расположения потомков в теге figure:

<figure>
<figcaption></figcaption>
инлайновые элементы, блочные элементы и текст
</figure>

<figure>
инлайновые элементы, блочные элементы и текст
<figcaption></figcaption>
</figure>

<figure>
инлайновые элементы, блочные элементы и текст
</figure>

Но в такой конфигурации парсер почему-то вырезает теги thumb, а если оставить только Flow - то нет.

Где дыра?

 

38 минут назад, celsoft сказал:

А мета только для микроразметки используется? Нет. Это управляющий важной информацией код, влияющий на кодировку, на метатеги страницы, и т.д. И его использование просто в тексте новости небезопасно, поэтому его не не может быть, как того же JS. Опасность для сайта не только воровство вашего пароля, но понижение его ранжирования и изменение кодировки и влияние на отображение. А это все может делать тег <meta>

Вот именно с этой точки зрения и с той точки зрения, что грамотный вебмастер будет максимально автоматизировать свой труд, я и не стал лезть в настройки редактора Froala Editor для того, чтобы прописывать микроразметку изображений. Это все делается плагином в парсере автоматически.

Share this post


Link to post
Share on other sites
2 часа назад, Alex-GR сказал:

Где дыра?

Я же вам сказал, я не даю готовых инструкций по использованию уязвимостей. Повторю еще раз, уязвимость не равно кража доступа, уязвимости бывают разные. Считаете что у вас все безопасно, ваше право, ваш выбор, и ваши действия. Я вас не отговариваю. Потом просто не приходите сюда с вопросами почему мой сайт взламывают что случилось и что делать и т.д. Это ваш сайт, ваши действия и ваш выбор. Я не буду с ним спорить и вас уговаривать.

 

2 часа назад, Alex-GR сказал:

Но в такой конфигурации парсер почему-то вырезает теги thumb

Как думаете почему? При том что бага в парсере нет. Обратите внимание на то что вы читаете https://developer.mozilla.org/ru/docs/Web/HTML/Element/figure и сравните с оригиналом https://www.w3schools.com/tags/tag_figure.asp и также на mozilla в оригинале https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figure

 

Видите разницу? Если нет, то это "кривой перевод на русский" и фраза "tag specifies self-contained content" не означает "представляет самостоятельный контент". Это группировка отдельных самодостаточных элементов. Элементы в FTML могут быть блочными или инлайновыми. Просто набор текста не является элементом, он станет являться таковым внутри блока или инлайна например внутри <div> <p> или <a> и т.д. Не верите мне, изучите примеры, данные в документации. Текст не зря дан в блоках, а не написан просто так. Тег figure группирует элементы. А у вас их нет в том как вы написали, поэтому парсер убирает. Бага здесь нет. И я вам выше ссылку на нормальную документацию, где нормальный перевод, но вам это не интересно, вам лишь бы поспорить. Если бы вы заключили thumb в div ничего бы не вырезалось, потому как все становится валидным, figure группирует div котором в свою очередь текст. Группируются элементы, а элемент верстки отсутвует у вас, он появится только после обработки thumb а может и не появится вообще потому как thumb может быть некорректен, поэтому он удаляет сразу текст как невалидный.

 

Вы создали свою тему в разделе "Прием багов". Я вам лишь написал что багов в указаннных вопросах нет, ничего исправляться в данном вопросе не будет. А то что вы решили править под себя плагинами, так это ваш выбор и ваше право, которое никто не собирается оспаривать.

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this