Временный плагин: лечим ошибку 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 выпустит полноценные патчи и восстановит штатную работу серверов — этот плагин необходимо обязательно отключить или удалить, чтобы вернуть полноценную загрузку файлов на сайт.
Техническая поддержка MODX
Сайт лежит, тормозит или остался без разработчика?
Переезд с MODX 2 на 3, PHP 7 на 8, скорость и безопасность. Поддержка со сроками и ответственностью, а не совет в чате.
Подробнее
Реклама
0
Комментарии: 0