Назад | Перейти на главную страницу

Блокировка запроса с помощью ModSecurity и lua скрипта

У меня есть веб-трафик, проходящий через ModSecurity.

В конфигурации ModSecurity я вызываю сценарий Lua, который выполняет простой анализ аргументов строки запроса. В частности, он проверяет наличие доказательств межсайтового скриптинга и блокирует входящий трафик, если есть какие-то доказательства.

Конфигурация механизма правил ModSecurity следующая:

SecRuleEngine On
SecRuleScript "/path/to/lua/script/detectXSS.lua" "block"

Наглядный пример сценария lua выглядит следующим образом:

function main()
    -- Retrieve script parameters
    local d = m.getvars("ARGS", { "lowercase", "htmlEntityDecode" } );

    -- Loop through the parameters
    for i = 1, #d do
        -- Examine parameter value.
        if (string.find(d[i].value, "<script")) then
            return ("Suspected XSS in variable " .. d[i].name .. ".");
        end
    end

    -- Nothing wrong found.
    return nil;
end

Хотя XSS может быть обнаружен и возвращен, функция блокировки не выполняется. Не хватает чего-то очевидного? Любая помощь будет принята с благодарностью.

Ура

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

Причина этого block - это специально определенное действие, которое вы затем можете определить, как обрабатывать. Вы можете запретить, просто зарегистрировать или перенаправить на страницу с ошибкой, когда ваше правило блокируется. Это устанавливается с помощью SecDefaultAction, и по умолчанию передается правило, как показано здесь: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#SecDefaultAction. Хотя это может показаться бессмысленным, оно также позволяет вам делать такие вещи, как легкое включение или выключение оценки аномалий в OWASP CRS.

Так что либо измените свой SecRuleScipt на deny скорее, чем block:

SecRuleEngine On
SecRuleScript "/path/to/lua/script/detectXSS.lua" "deny"

Или, в качестве альтернативы, установите значение по умолчанию block действие по отказу:

SecRuleEngine On
SecDefaultAction "phase:2,deny"
SecRuleScript "/path/to/lua/script/detectXSS.lua" "block"

Подробнее о block: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#block