Moje osobiste przeczucie mówi:nie zawracaj sobie głowy. Ale z drugiej strony, jeśli jednak to zrobisz lub nawet musisz, oto kilka sugestii, jak poradzić sobie z tym wymogiem:
- Możesz zdefiniować maksymalny czas, przez jaki zapytanie może zostać uruchomione przy użyciu maxTimeMS() .
- Możesz spróbować oczyścić dane wejściowe wyrażeń regularnych, ale wątpię, czy istnieją biblioteki, które pomogłyby ci w tym, biorąc pod uwagę niekończące się odmiany potencjalnie długo działających złożonych zapytań. Ograniczenie długości wyrażenia regularnego również może pomóc, ale z drugiej strony prawdopodobnie zaprzecza celowi, jakim jest umożliwienie użytkownikowi wygodnego wyszukiwania przy użyciu dowolnych filtrów.
- Możesz udostępnić bardziej ustrukturyzowane dane wejściowe zapytania, które np. zezwól użytkownikowi tylko na wpisanie pojedynczego tekstu alfanumerycznego, który następnie należy owinąć w wyrażenie regularne po stronie serwera, aby umożliwić np. Zapytania „zaczyna się od”, „zawiera” lub „kończy się na” lub coś takiego.
- Możesz zezwolić tylko na jedno równoległe zapytanie na użytkownika (sesję? ip?), co prawdopodobnie pomogłoby trochę przeciwko śmiertelnym atakom DoS, ale z pewnością nie przeciwko rozproszonym... Lub możesz nawet zezwolić tylko na jedno równoległe wywołanie tego punkt końcowy w całym systemie.