Эта тема была решена командой Discourse. Я оставляю оригинальную тему открытой для архивных целей, но проблема была решена @Roman и командой.
Недавно я восстановил Discourse, чтобы обновить настройки SMTP, и теперь HTML-теги моего глобального уведомления отображаются как текст.
Вот как это выглядит с тегами:
Добро пожаловать на новые форумы Real Racin' USA Motor Sports!
Ваши молитвы и пожелания услышаны.
Мы подготовили для вас более быстрый, современный и удобный форум, перенеся всё с старого форума на этот. Все ваши темы, сообщения и профили пользователей остались нетронутыми, точно так же, как вы их оставили!
Да, мы больше не разрешаем использовать HTML в настройке глобального уведомления на сайте — только обычный текст. Мы решили обрабатывать его как любой другой пользовательский ввод и очищать от вредоносного содержимого.
Как упоминалось выше, обходным решением будет использование темы с баннером.
Хм, просто моё личное мнение, но у этих двух функций совершенно разные цели.
Глобальный баннер нужен для определённой цели, например, когда я хочу сообщить форуму о важной теме. Если пользователь закрыл баннер, это предпочтение сохраняется, и он не увидит обновление, которое в противном случае было бы видно в виде глобального уведомления.
Да, мы решили сохранить эту настройку, так как понимаем, насколько полезен нескрываемый баннер в критической ситуации, однако возможность вставки неочищенного HTML может быть потенциально опасной.
Если у кого-то есть права на установку глобального уведомления, значит, он также имеет право создавать компонент темы? То есть здесь нет дополнительных векторов атаки?
Для ясности: мы не считаем это проблемой безопасности, поскольку обновлять этот параметр могут только администраторы. Это часть текущей работы по запрету HTML в настройках сайта и использованию других инструментов, предназначенных для этого.
Позвольте мне изложить аргументы в пользу разрешения HTML. Я работаю с клиентом, который запускает форум для инвесторов (закрытое бета-тестирование началось вчера, как раз так вышло). Их юридический отдел настаивает на наличии отказа от ответственности. Он должен:
В качестве примера (не того сайта, над которым я работаю, но в той же нише) посмотрите на отказ от ответственности на Freetrade. Важно отметить, что юридическому отделу не важно, содержит ли уведомление HTML. Их интересует только то, чтобы оно было на месте и пользователи не могли утверждать, что не видели его.
К сожалению, это уведомление выглядит не очень эстетично, так как представляет собой большой блок текста. К счастью, юристы согласны с использованием меньшего шрифта и ссылкой на полный отказ от ответственности. На прошлой неделе команда представила юридическому отделу текст, включающий ссылку на отказ от ответственности. На этой неделе мы обнаружили, что HTML больше не разрешен в глобальных уведомлениях. Вот так вот.
Между тем, если бы мы использовали это по назначению («СРОЧНО, АВАРИЙНОЕ, неотключаемое глобальное баннерное уведомление для всех посетителей»), разве не было бы удобно иметь возможность ссылаться на страницу статуса или другое место для получения дополнительной информации?
Однако это действительно не «любой другой ввод пользователя», верно? Это настройка сайта, которую могут изменить лишь горстка людей. С точки зрения владельцев сайта это не ввод пользователя, а часть интерфейса, предоставляемого пользователям.[2]
Есть ли где-то объяснение причин? Если вы работаете над другим инструментом для поддержки неотключаемых глобальных баннеров, позволяющих ссылки,[3] было бы полезно знать, когда он будет готов. Я бы предпочел избежать необходимости настраивать кастомизацию, если это возможно.
Извините, если я звучу немного ворчливо. Мы не знали, что такое изменение грядет, и это ставит нас в неловкое положение. Сообщество должно было быть открыто для более широкой аудитории на следующей неделе, а это изменение вносит свои коррективы.
Я вижу аргумент, что это неправильное использование функции. Но если бы мы создавали эту функцию сами, она работала бы точно так же, как глобальное уведомление. ↩︎
Я понимаю, что с точки зрения Discourse администраторы — это пользователи. Просто в данном случае это кажется неправильным подходом. ↩︎
Мои первоначальные соображения по этому поводу связаны с дополнительной защитой записей базы данных, в основном из-за проблем с кодировкой в старом форуме, которым я пользовался.
Эмодзи на форуме преобразовывались в формат &#, и при цитировании вызывали ошибки «Недопустимая последовательность байтов в utf-8» при конвертации, в результате чего на форуме эмодзи отображались как символы �.
Я подумал, что нечто подобное может произойти и с HTML-тегами в будущем обновлении, что вызовет проблемы с базой данных и сделает все сообщества неработоспособными.
Человек, лучше знающий код, вероятно, мог бы заверить, что этого, скорее всего, не произойдёт благодаря множественным проверкам, которые проходит каждое исправление перед попаданием в основную ветку для загрузки/обновления. Команда Discourse стремится сделать систему самодостаточным, безпроблемным решением в один клик для всех, кто хочет создать сообщество онлайн, и у них это хорошо получается!
Тем не менее, моё простое решение пока достаточно, пока не будет опубликовано новое. К тому же приятно иметь меньше визуального шума на экране, поскольку можно скрывать темы-баннеры.