Per quanto riguarda l'iniezione di problemi, come con SQL, il rischio è significativamente inferiore... anche se teoricamente possibile tramite un vettore di attacco sconosciuto.
Le strutture dati e il protocollo sono binari e basati su API anziché sfruttare i valori di escape all'interno di un linguaggio specifico del dominio. Fondamentalmente, non puoi semplicemente indurre il parser ad aggiungere un ";db.dropCollection()" alla fine.
Se viene utilizzato solo per le query, probabilmente va bene... ma ti consiglio comunque di usare un po' di convalida:
- Assicurati solo i caratteri alfanumerici (filtra o invalida i valori null e qualsiasi altra cosa che normalmente non accetteresti)
- Applica una lunghezza massima (come 255 caratteri) per termine
- Applica una lunghezza massima dell'intera query
- Strip speciale nomi dei parametri che iniziano con "$", come "$dove" e simili
- Non consentire array/documenti/hash nidificati... solo stringhe e int
Inoltre, tieni presente che una query vuota restituisce tutto. Potresti volere un limite su quel valore di ritorno. :)