sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB $ regex dotaz a potenciální exploity

Můj docela osobní pocit říká:Neobtěžuj se. Ale znovu, pokud to přesto uděláte nebo dokonce musíte, zde je několik návrhů, jak se s tímto požadavkem vypořádat:

  1. Můžete definovat maximální dobu, po kterou může dotaz běžet, pomocí maxTimeMS() .
  2. Mohli byste se pokusit dezinfikovat vstup regulárního výrazu, ale pochybuji, že existují knihovny, které by vám s tím pomohly, vzhledem k nekonečným variacím potenciálně dlouhotrvajících složitých dotazů. Omezení délky regulárního výrazu by také mohlo pomoci, ale na druhou stranu pravděpodobně maří účel umožnit uživateli pohodlné vyhledávání pomocí libovolných filtrů.
  3. Mohli byste poskytnout strukturovanější vstup dotazu, který by např. umožnit uživateli zadat pouze jeden alfanumerický text, který byste pak zabalili do regulárního výrazu na straně serveru, abyste umožnili např. "začíná-s", "obsahuje" nebo "končí" dotazy nebo tak něco.
  4. Mohli byste povolit pouze jeden paralelní dotaz na uživatele (relaci? ip?), což by pravděpodobně trochu pomohlo proti fatálním DoS útokům, ale rozhodně ne proti distribuovaným... Nebo byste dokonce mohli povolit pouze jediné paralelní volání tohoto koncový bod v celém systému.



  1. Přejmenujte pole ve výsledcích dotazu v MongoDB

  2. Meteor:Jak zkontrolovat, zda je položka v poli pole, ale vyloučit toto pole v Publikovat?

  3. Při vícenásobném přihlášení k odběru máte duplicitní data

  4. mongodb:jak aktualizovat prvek pole podle čísla indexu