XenForo 2.4 Улучшения PWA и усиленная защита CSRF

Улучшения PWA

Сразу вслед за объявленными ранее улучшениями, сегодня мы представляем вам ещё один пакет изменений, вновь предоставленный @digitalpoint! На этот раз мы сосредоточимся на улучшениях для Прогрессивных Веб-приложений (Progressive Web Apps, PWA), которые уже знакомы некоторым из вас, использующим дополнение [DigitalPoint] PWA.

Редактирование манифеста веб-приложения

Мы используем манифест веб-приложения уже некоторое время, но начиная с XenForo 2.4, вы сможете модифицировать манифест веб-приложения с помощью новой опции additionalWebAppManifest:

1743790380014.jpg

Кроме добавления дополнительных свойств, вы также можете переопределять существующие. Существует множество ресурсов, документирующих поддерживаемые (и экспериментальные!) опции.

JSON:
{
  "name": "XF 2.4",
  "short_name": "XF 2.4",
  "description": "Community platform by XenForo®",
  "icons": [
    {
      "src": "/data/assets/logo/xenforo-icon-large.png",
      "sizes": "192x192",
      "purpose": "any"
    },
    {
      "src": "/data/assets/logo/xenforo-icon-large.png",
      "sizes": "192x192",
      "purpose": "maskable"
    },
    {
      "src": "/data/assets/logo/xenforo-icon-large.png",
      "sizes": "512x512",
      "purpose": "any"
    },
    {
      "src": "/data/assets/logo/xenforo-icon-large.png",
      "sizes": "512x512",
      "purpose": "maskable"
    }
  ],
  "lang": "en-US",
  "dir": "ltr",
  "display": "standalone",
  "scope": "/",
  "id": "/?_pwa=1",
  "start_url": "/?_pwa=BkGzMt_ojcv1jsEts8Rl26Zca2M1IH9y",
  "background_color": "#ebebeb",
  "theme_color": "#0f578a",
  "orientation": "portrait",
  "categories": [
    "social",
    "lifestyle"
  ]
}

Автоматический вход после установки PWA

Манифест веб-приложения теперь содержит специальный уникальный токен в свойствах start_url, который позволяет пользователям всех браузеров автоматически входить в систему после установки PWA.

Автоматическое обновление счетчика уведомлений

Независимо от того, переключаетесь ли вы вкладки в обычном браузере или запускаете установленное PWA-приложение, при этом вы теперь инициируете обновление счётчиков уведомлений — это означает, что для обновления последних показателей входящих сообщений и предупреждений больше не потребуется перезагрузка страницы или навигация.

Более заметное уведомление о push-уведомлениях

При первом установке PWA уведомление о push-уведомлении будет отображено более заметно:

1743791724771.jpg

Более надежная подписка на push-уведомления

В некоторых случаях браузеры могут "терять" подписку на push-уведомления при определённых условиях. Это в основном происходит в Safari (macOS и iOS), но теоретически такое поведение может затронуть и другие браузеры, основанные на движке Chromium, а также Firefox. Это связано с необходимостью в реальных действиях пользователя для активации подписки на push-уведомления, а не автоматического выполнения программным путём. Логику подписки на push-уведомления в XenForo 2.4 полностью переработали, чтобы избежать подобных ситуаций, особенно актуальных при выполнении действий, таких как проверка двухфакторной аутентификации (2FA).

Отправлять push-уведомления из панели администратора?

Строго говоря, это ещё не реализовано. Однако мы хотели бы услышать ваши мысли о том, было бы это полезной функцией. Дополнение DigitalPoint PWA позволяет администраторам отправлять push-уведомления пользователям на основании определённых критериев. Это похоже на функции "Оповещать пользователей", "Отправлять письма пользователям" и "Сообщать пользователям". Это частично дублирует функцию "Оповещать пользователей", поскольку она уже отправляет push-уведомления наряду с предупреждениями любому пользователю, активировавшему push-уведомления. Функция "Отправлять push-уведомления" может быть реализована из дополнения, если для неё найдутся разумные сценарии использования. Сообщите нам об этом ниже!

Усиленная защита CSRF

Хотя это также является функцией дополнения @digitalpoint, мы выделяем её отдельно, поскольку расширили её для охвата большего числа сценариев использования. Это изменение носит технический характер и осуществляется на уровне серверной инфраструктуры, а не касается интерфейса пользователя.

На поддерживаемых браузерах мы теперь используем Fetch Metadata для предотвращения атак типа CSRF (межсайтовая подделка запросов), заменяя традиционный подход, основанный на токенах. Это сравнительно новая функция, поддерживаемая всеми современными браузерами. Более старые браузеры плавно переходят на старый метод с использованием токенов. Такое изменение помогает избежать распространённой проблемы с просроченными токенами, особенно на мобильных устройствах или при использовании кеширующих сервисов, таких как Cloudflare, для обслуживания гостевого контента.

Кроме того, мы устранили использование токенов в запросах GET для операций, изменяющих состояние (например, выход из системы). Чтобы сохранить тот же пользовательский опыт, эти операции теперь выполняются через запросы POST, инициируемые JavaScript. Мы также предусмотрели постепенное снижение функционала. Если JavaScript отключён или ссылка открывается напрямую, пользователю будет предложено подтверждение с помощью формы обратной связи.

Для разработчиков

Как упоминалось ранее, появился новый обработчик XF.LinkPostClick, который позволяет ссылкам инициировать POST-запросы. Например:

HTML:
<a href="{{ link('route') }}" data-xf-click="link-post">Change state</a>

Мы также внедрили плагин-контроллер RedirectPlugin, который отображает промежуточную форму автоотправки при перенаправлении на операцию изменения состояния. Например:

PHP:
$redirectPlugin = $this->plugin(\XF\ControllerPlugin\RedirectPlugin::class);

return $redirectPlugin->actionPost($this->buildLink('route'));

Наконец, Fetch Metadata теперь используется для предотвращения встраивания URL в изображения. Эта защита автоматическая, даже без вызова метода assertNotEmbeddedImageRequest. Если вам нужно разрешить встраивание (как мы делаем для вложений), отменяйте использование метода isAllowedMediaEmbedAction. Например:

PHP:
public function isAllowedMediaEmbedAction(
    string $action,
    ParameterBag|null $params = null
): bool
{
    return strtolower($action) === 'index';
}
 
Обнова хорошая, я так понимаю уже скоро 2.4 ждать?)) По крайне мере RC явно может быть к концу году.
 
Последнее редактирование:
да емае, я только до 2.3 обновился
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу