Я хотел бы создать mod_security коллекция, основанная на чем-то другом, кроме IP-адреса пользователя, идентификатора сеанса или имени пользователя. В частности, на основе REQUEST_URI. Однако mod_security указывает что это невозможно. Мой вопрос в том, есть ли какое-то обходное решение.
Я пробовал следующее, но не смог заставить его работать:
SetEnvIf Request_URI "^\/([a-z0-9]+)\/" account="$1"
SecAction setsid:%{account},pass,nolog
SecAction "phase:2,pass,setvar:session.count=+1,nolog"
SecRule SESSION:COUNT "@gt 60" "phase:2,deny,status:503,skip:1,nolog"
SecAction "phase:5,deprecatevar:session.count=1/1,pass,nolog"
Приведенное выше должно извлечь имя учетной записи из URL-адреса (строка 1) и использовать его в качестве идентификатора сеанса (строка 2; это то, что не работает). Затем он увеличивает количество запросов для каждого запроса, который включает это имя учетной записи (строка 3). Если счет превышает 60 (строка 4), возвращается ошибка 503. Счетчик уменьшается на 1 каждые 1 секунду (строка 5).