Временный плагин: лечим ошибку 403 при блокировке multipart/form-data хостером

Решение ошибки 403 Forbidden при сохранении документов в MODX (Хостинг Beget)



После недавних новостей о критической уязвимости в PHP, хостинг-провайдер Beget превентивно ввел жесткие ограничения безопасности (Уязвимость в PHP от 21.10.2026). В частности, хостер временно ограничил обработку POST-запросов типа
multipart/form-data
.


Из-за этого многие владельцы сайтов на MODX (особенно на старых версиях PHP, включая 7.4) столкнулись с ошибкой 403 Forbidden при банальной попытке сохранить измененный документ или чанк. Причина в том, что базовая форма редактирования в MODX по умолчанию содержит атрибут
enctype="multipart/form-data"
, из-за чего сервер отклоняет любой запрос на сохранение.

Важное предупреждение: Приведенное ниже решение является временным костылем! Оно удаляет атрибут шифрования форм, что возвращает возможность редактировать и сохранять тексты страниц, но полностью блокирует прямую загрузку файлов/изображений через эти формы, пока хостинг не снимет ограничения или вы не обновите PHP до безопасной версии.

Временное решение: Плагин для очистки enctype

Создаем плагин, который будет автоматически находить формы в админке и убирать блокирующий атрибут enctype

  • Имя плагина: RemoveFormEnctype
  • Системное событие: OnManagerPageInit
<?php
/**
 * Плагин удаляет enctype="multipart/form-data" со всех форм в админке MODX
 * Событие: OnManagerPageInit
 */

if ($modx->context->get('key') == 'mgr') {
    $script = "
    <script type=\"text/javascript\">
    Ext.onReady(function() {
        function clearFormEnctype() {
            var forms = document.querySelectorAll('form[enctype=\"multipart/form-data\"]');
            forms.forEach(function(form) {
                form.removeAttribute('enctype');
            });
        }

        // Первичный проход при загрузке страницы
        clearFormEnctype();

        // Отслеживание динамически появляющихся форм и модальных окон ExtJS
        var observer = new MutationObserver(function(mutations) {
            clearFormEnctype();
        });

        observer.observe(document.body, {
            childList: true,
            subtree: true
        });
    });
    </script>
    ";

    $modx->regClientStartupHTMLBlock($script);
}

return;
Как только Beget выпустит полноценные патчи и восстановит штатную работу серверов — этот плагин необходимо обязательно отключить или удалить, чтобы вернуть полноценную загрузку файлов на сайт.
vectorserver
vectorserver
1 час назад
modx.pro
9
Поблагодарить автора Отправить деньги

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0