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

FoxFireWWW

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

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

  • Посещение

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

    1

Решения сообщества

  1. Пост FoxFireWWW - сообщение в Ошибка rewrite:error AH10411: Rewritten query string contains control characters or spaces был отмечен как ответ   
    @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
     
    Отпишитесь если поможет, ниже)
×
×
  • Создать...