Перейти к содержанию
  • RU
    • Язык

FoxFireWWW

Пользователь
  • Постов

    2
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Весь контент FoxFireWWW

  1. https://support.cpanel.net/hc/en-us/articles/13088058673559-Apache-2-4-56-write-rules-return-a-403-if-there-is-a-space-in-the-URL https://support.cpanel.net/hc/en-us/community/posts/19163972817303-UPS-505-AH10411-errors-after-Apache-update-v2-4-56?sort_by=votes
  2. @DRNG Можете смело менять. Добавление флага B — это прямое решение проблемы, описанной в ваших логах (AH10411). Добавление флага [B] — это правильное и необходимое решение для устранения ошибки AH10411, которая появилась после обновления Apache. В чем причина ошибки? Ошибка AH10411: Rewritten query string contains control characters or spaces возникает из-за изменений в системе безопасности Apache, начиная с версии 2.4.56 (март 2023 года) . Суть проблемы: Теперь Apache блокирует (возвращает ошибку 403) внутренние переадресации (rewrites), в результате которых в строку запроса (_route_ в вашем случае) попадают пробелы или управляющие символы . Раньше это считалось допустимым, но теперь воспринимается как потенциальная угроза безопасности (CVE-2023-25690) . Что происходит в вашем случае: В ссылке вида .../shkaf-kupe-ekspress-s-3-zerkalami-sonoma-serebryanyj-profil-1800h600h2200.html нет пробела. Проблема возникает из-за символа перевода строки или другого управляющего символа, который появляется в логах. Почему флаг [B] решает проблему? Флаг [B] (escape backreferences) предписывает Apache принудительно кодировать специальные символы (включая пробелы и управляющие символы) в URL-совместимый формат (%20 для пробела) до того, как они будут подставлены в строку запроса (index.php?_route_=$1) . Таким образом, еще до того, как Apache проверит строку запроса на наличие "опасных" символов, они будут преобразованы в безопасный вид, и ошибка не возникнет. Как правильно заменить? Просто добавьте B к существующему списку флагов. Ваша новая строка будет выглядеть так: RewriteRule ^([^?]*) index.php?_route_=$1 [B,L,QSA] Именно такая замена (добавление B) рекомендуется в официальных источниках и на форумах поддержки как основной способ решения проблемы AH10411 . Дополнительные рекомендации (если простого [B] окажется недостаточно) В некоторых случаях флаг [B] может кодировать слишком много символов (например, & в строке запроса), что может повлиять на работу вашего приложения (например, сломается разбор $_GET) . Если после замены вы заметили, что перестали работать какие-то параметры в URL, можно использовать более тонкую настройку, доступную в Apache 2.4.26 и новее: ограничить список символов для кодирования . Например, чтобы кодировать только пробел и знак вопроса (оставляя остальные символы как есть), можно заменить правило на: # Обратите внимание на кавычки вокруг флагов RewriteRule ^([^?]*) index.php?_route_=$1 "[B= ?,L,QSA]" Это может помочь сохранить работоспособность сложных URL . Краткое резюме, почему это безопасно: Ошибка известная: Проблема возникла после обновления безопасности Apache и массово проявляется на многих хостингах. Решение официальное: Флаг B заставляет Apache экранировать "опасные" символы (вроде невидимого символа из вашего лога), превращая их в безопасный вид. Без этого флага Apache считает такие символы угрозой и блокирует запрос. Для вашего правила это штатная работа: Вы передаете URL в параметр _route_. Флаг B просто приводит этот URL к стандартному безопасному виду. Никакой магии или поломки функционала не произойдет. Просто замените [L,QSA] на [L,QSA,B] (или [B,L,QSA] — порядок флагов не важен) и ошибка уйдет. С вероятностью 99% этого будет достаточно для вашего сайта. Источник www Отпишитесь если поможет, ниже)
×
×
  • Создать...