ModSecurity Блокирует недопустимый реферер хоста

Мне нужно правило, чтобы блокировать все запросы POST к wp-login.php,
Но мне нужно проверить, совпадает ли домен реферера с запрошенным доменным именем
Нам нужно проверить такие вещи:

  1. проверить запрошенное значение домена (пример: sitename1.com)
  2. проверить значение домена реферера (пример: sitename1.com)
  3. если запрашиваемый домен равен домену реферера
  4. если запрос POST
  5. если запрашиваемый файл wp-login.php

У меня есть следующий код для проверки реферера, но мне также нужно проверить домен в реферере

#Block WP logins with no referring URL
<Locationmatch "/wp-login.php">
SecRule REQUEST_METHOD "POST"  "deny,status:401,id:5000130,chain,msg:'wp-login request blocked, no referer'"
SecRule &HTTP_REFERER "@eq 0"
</Locationmatch>

в этом случае я могу полностью проверить посетителя и удостовериться, что он человеческая благодарность за любую помощь


person Farhad Sakhaei    schedule 11.05.2021    source источник


Ответы (1)


Я не уверен, что понимаю ваш вопрос, но, возможно, вам поможет это связанное правило:

SecRule &REQUEST_HEADERS:Referer "!@eq 0" \
    "id:5000130,\
    phase:1,\
    t:none,\
    deny,\
    status:401,\
    chain,\
    msg:'wp-login request blocked, no referer'"
    SecRule REQUEST_URI "@beginsWith /wp-login.php" \
        "chain"
        SecRule REQUEST_METHOD "@streq POST" \
            "chain"
            SecRule REQUEST_HEADERS:Host "@rx .*" \
                "capture,\
                chain"
                SecRule REQUEST_HEADERS:Referer "@streq %{TX.0}"

Пожалуйста, имейте в виду:

  • это связанное правило работает, только если установлен заголовок Referer
  • заголовок Host также должен существовать

Возможно, вам нужно другое связанное правило, которое проверяет наличие заголовка Referer, если URI равен /wp-login, но я думаю, что на основе приведенного выше правила вы можете его создать.

person airween    schedule 24.05.2021
comment
Большое спасибо, просто я думаю, что захваченная строка является хостом, но вы пытаетесь сравнить URL-адрес реферера - person Farhad Sakhaei; 24.05.2021
comment
Нам нужно сравнить реферальный домен , а не реферальный url | uri - person Farhad Sakhaei; 24.05.2021
comment
Не стесняйтесь заменять правило по своему усмотрению. - person airween; 24.05.2021
comment
Я попробую и проверю, а затем добавлю окончательные правила, спасибо - person Farhad Sakhaei; 24.05.2021
comment
Вы должны изменить аргумент оператора @rx на http(|s):\/\/([^:\/]+)(:(\d)|\/).*, а %{TX.0} на %{TX.2}. В этом случае движок сравнит заголовок Host с хостовой частью Referer. Я думаю, это то, что вам нужно. - person airween; 25.05.2021
comment
Или может быть используется оператор @contains? SecRule REQUEST_HEADERS:Referer "@contains %{SERVER_NAME}", можно? - person Farhad Sakhaei; 25.05.2021
comment
Я не уверен, что %{SERVER_NAME} действителен. Для макросов используется нотация %{}, и движок может ее расширить, но боюсь такого макроса нет - не стесняйтесь проверить. Кстати, вот документация: github.com/SpiderLabs /ModSecurity/вики/. - person airween; 26.05.2021