2016-10-14 13 views
0

Мне нужно заблокировать запрос GET для определенного пути URI. Я использую аномальный режим, но им, используя правило прямой блок, я не могу получить правило для правильной работыМодифицировать защиту Блокировать запрос GET на путь URI

пример GET /secure/test/bla/bla/ пример https://bla.bla.com/secure/test/bla/bla?www.test.com

SecRule REQUEST_URI "@streq \/secure\/test\/bla\/bla\?.+" \ 
"phase:1,id:92,t:none,t:urlDecode,t:lowercase,t:normalizePath,deny,status:403,msg:'403 Access Denied',chain" 
SecRule REQUEST_METHOD "@streq post" "t:none,t:lowercase" 

Могу ли я написать это с выражением Изотерм, как так ?

SecRule REQUEST_URI "[email protected] ^(:?\/secure\/test\/bla\/bla\?.+)$" \ 
"phase:1,id:91,t:none,t:urlDecode,t:lowercase,t:normalizePath,deny,status:403,msg:'403 Access Denied',chain" 
SecRule REQUEST_METHOD "@streq post" "t:none,t:lowercase" 

Это не работает, и я не могу понять, почему, нужно ли писать регулярное выражение по-другому?

В правиле отключения мне нужно добавить "@rx? Что разница betweeen "[email protected] and @rx

ответ

0

Так это продолжение этого вопроса: modsecurity create rule disable GET request

example GET /secure/test/bla/bla/ example 
https://bla.bla.com/secure/test/bla/bla?www.test.com 

Я понятия не имею, что это значит. Можете ли вы переписать его более значимым? Вы говорите, что URL-адрес будет содержать другой домен?

С примерами, которые вы указали, есть несколько вещей. Например, эта часть:

"@streq \/secure\/test\/bla\/bla\?.+" 

@streq означает, что это является прямым сравнением строк. Таким образом, вы не можете использовать ?.+ частей, которые, как мне кажется, являются частью регулярных выражений? Если вы хотите, чтобы регулярное выражение, то это по умолчанию, так что не включают @streq бит:

"\/secure\/test\/bla\/bla\?.+" 

Я также не думаю, что вам нужно, чтобы избежать слеша, но не должны делать никакого вреда, чтобы сделать это.

Также у Вас есть это:

SecRule REQUEST_METHOD "@streq post" "t:none,t:lowercase" 

Почему вы проверяя пост, когда вы хотите, чтобы заблокировать получить запросы?

В secound правило мне нужно добавить "@rx? Что разница betweeen"! @rx и @rx

@rx означает, что за ним следует регулярное выражение. Поскольку я говорю, что это значение по умолчанию, поэтому на самом деле не нужно включать, поскольку @rx будет приниматься, если не предоставлена ​​другая команда @.

! @rx означает, что регулярное выражение должно соответствовать , а не - применять это правило к любому запросу, который не соответствует этому регулярному выражению.

Могу ли я написать это с выражением reg так?

SecRule REQUEST_URI "[email protected] ^(:?\/secure\/test\/bla\/bla\?.+)$" \ 
"phase:1,id:91,t:none,t:urlDecode,t:lowercase,t:normalizePath,deny,status:403,msg:'403 

Access Denied», цепь» SecRule REQUEST_METHOD "@streq пост" "т: нет, т: строчной"

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

Таким образом, запрос POST в/что-либо будет заблокирован И запрос GET на все что-либо не будет заблокирован Это, кажется, точная противоположность т чего ты хочешь! Хотя POST to/secure/test/bla/bla/все равно будет разрешен, так как он не будет соответствовать первому правилу и поэтому будет разрешен.

Я действительно думаю, что вам нужно изучить основы ModSecurity, поскольку вы, очевидно, пытаетесь это понять.

Основной синтаксис правила ModSecurity является:

SecRule \ 
    VARIABLE_TO_CHECK \ 
    VALUE_TO_CHECK_FOR \ 
    ACTION_TO_TAKE_IF_MATCHED \ 

С \ позволяя вам отделить власть над несколькими Iines для удобства чтения.

  • VARIABLE_TO_CHECK может быть любым из списка ModSecurity переменных (https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#Variables)

  • VALUE_TO_CHECK_FOR является регулярное выражение по умолчанию. Хотя может быть изменено, чтобы быть прямым сравнением строк, например. Это будет по сравнению со значением VARIABLE_TO_CHECK, и если он соответствует ACTION_TO_TAKE_IF_MATCHED, будет запущен, если он не соответствует ModSecurity прекратит обработку этого правила для этого запроса и переместит на следующее правило.

  • ACTION_TO_TAKE_IF_MATCHED - это список действий (https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#Actions). Каждое правило должно иметь идентификатор, а затем обычно либо блокирует запросы , которые соответствуют выше (с использованием deny), либо запросы белых списков (с использованием allow).

Так, например:

SecRule \ 
    REQUEST_URI \ 
    "^/secure/test/bla/bla/.*" \ 
    "id:1234,deny" 

будет отрицать любые запросы/безопасный/тест/л/л/(GET и POST).

Если вы хотите проверить две переменные, вам нужно связать два разных правила вместе, и в этом случае любые разрушительные действия (например, deny) будут выполняться только в том случае, если полная цепочка соответствует всем правилам, - но смутно первое правило должно указывать конечное действие.

SecRule \ 
    REQUEST_URI \ 
    "^/secure/test/bla/bla/.*" \ 
    "id:1234,deny,chain" 
SecRule \ 
    REQUEST_METHOD \ 
    "GET" 

Так что это правило запретит любые запросы в любое место, начиная с/безопасными/тестом/л/л/который также запрос GET.

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

Как я уже советовал, я настоятельно рекомендую вам купить и прочитать ModSecurity handbook, чтобы научить вас, как работает ModSecurity.