Il mio istinto piuttosto personale dice:non preoccuparti. Ma poi di nuovo, se lo fai comunque o addirittura devi, ecco alcuni suggerimenti su come affrontare questo requisito:
- Puoi definire un tempo massimo per l'esecuzione di una query per l'utilizzo di maxTimeMS() .
- Potresti tentare di disinfettare l'input regex, ma dubito che ci siano librerie là fuori che ti aiuterebbero in questo, date le infinite variazioni di query complesse potenzialmente di lunga durata. Anche limitare la lunghezza di una regex potrebbe essere d'aiuto, ma d'altra parte probabilmente vanifica lo scopo di consentire a un utente di eseguire comodamente la ricerca utilizzando filtri arbitrari.
- Potresti fornire input di query più strutturati che ad es. consentire solo a un utente di inserire un singolo testo alfanumerico che poi si avvolgerebbe in un'espressione regolare sul lato server per consentire ad es. "inizia con", "contiene" o "finisce con" query o qualcosa del genere.
- Potresti consentire solo una singola query parallela per utente (sessione? ip?) che probabilmente aiuterebbe un po' contro gli attacchi DoS fatali ma certamente non contro quelli distribuiti... Oppure potresti anche consentire solo una singola chiamata parallela di quella endpoint nell'intero sistema.