У меня есть веб-трафик, проходящий через 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