Блокировка дублирования HTTP-запроса с помощью мода безопасности
Я использую мод безопасности для поиска определенных значений в параметрах поста и блокирую запрос, если появляется дубликат. Я использую коллекцию пользователей мод безопасности для этого. Проблема в том, что мои запросы выполняются долго, поэтому один запрос может занять более 5 минут. Я полагаю, что пользовательская коллекция не будет записана на диск, пока не будет обработан первый запрос. Если во время выполнения первого запроса поступает другой запрос с использованием дублирующего значения для параметра post, второй запрос не блокируется, поскольку коллекция еще не доступна. Мне нужно избегать этой ситуации. Могу ли я использовать общие коллекции на основе памяти для запросов в мод безопасности? Любым другим путем? Фрагмент ниже:
SecRule ARGS_NAMES "uploadfilename" "id:400000,phase:2,nolog,setuid:%{ARGS.uploadfilename},initcol:USER=%{ARGS.uploadfilename},setvar:USER.duplicaterequests=+1,expirevar:USER.duplicaterequests=3600"
SecRule USER:duplicaterequests "@gt 1" "id:400001,phase:2,deny,status:409,msg:'Duplicate Request!'"
ErrorDocument 409 "<h1>Duplicate request!</h1><p>Looks like this is a duplicate request, if this is not on purpose, your original request is most likely still being processed. If this is on purpose, you'll need to go back, refresh the page, and re-submit the data."
1 ответ
ModSecurity - действительно не лучшее место, чтобы поместить эту логику.
Поскольку вы правильно заявляете, что при написании коллекции нет гарантии, поэтому, даже если коллекции были иным образом надежными (а это не так - см. Ниже), вы не должны использовать их для абсолютов, таких как повторные проверки. Они подходят для таких вещей, как перебор или DoS-проверки, когда, например, остановка после 11 или 12 проверок, а не 10 проверок, не такая уж большая проблема. Однако для абсолютных проверок, таких как остановка дубликатов, отсутствие определенности здесь означает, что это плохое место для этой проверки. Для меня WAF должен быть дополнительным уровнем защиты, а не тем, от чего вы зависите, чтобы заставить ваше приложение работать (или, по крайней мере, прекратить ломаться). Для меня, если повторный запрос вызывает реальную проблему для целостности транзакции приложения, то эти проверки принадлежат приложению, а не WAF.
В дополнение к этому, дисковый способ работы коллекций в ModSecurity вызывает множество проблем, особенно когда несколько процессов / потоков пытаются получить к ним доступ одновременно, что делает их ненадежными как для постоянных данных, так и для удаления постоянных данных. Многие люди в списках рассылки ModSecurity и OWASP ModSecurity CRS видели ошибки в файле журнала, когда ModSecurity пытался автоматически очистить коллекции, и, таким образом, видели, как файлы коллекций растут и растут, пока это не начнет оказывать вредное влияние на Apache. В целом, я не рекомендую пользовательские коллекции для производственного использования - особенно для веб-серверов любого объема.
Была создана версия ModSecurity для memcache, которая перестала использовать формат SDBM, основанный на сумерках, который мог решить многие из перечисленных выше проблем, однако он не был завершен, хотя он может быть частью ModSecurity v3. Однако я все еще не согласен с тем, что WAF - это место, чтобы проверить это.