sql >> Databáze >  >> RDS >> Mysql

Ochrana SQL Injection pouze pomocí str_replace

Tento izolovaný příklad je nezranitelný vůči injekci.

Musíte si ale uvědomit, že ochrana před sql injection není jen nahrazením postavy . A okolnosti se mohou lišit od těch, které v tuto chvíli považujete za samozřejmé. Váš kód by se tedy stal z dlouhodobého hlediska zranitelným kvůli zásadním nevýhodám této metody :

  • náhrada znaků je pouze část požadovaného formátování
  • tuto konkrétní náhradu lze použít pouze na struny, ostatní části zůstávají absolutně nechráněné.
  • takové nahrazení je mimo provádění dotazu, což znamená, že je náchylné k lidské chybě jakéhokoli druhu.
  • Takové nahrazení je v podstatě oddělitelné opatření, což znamená, že jej lze přesunout příliš daleko od skutečného provádění dotazu a nakonec jej zapomenout.
  • tento druh útěku je náchylný k útoku na kódování , takže použití řešení je příliš omezené.

Na nahrazení znaků samo o sobě není nic špatného, ​​ale pouze pokud je použito jako součást kompletního formátování; aplikováno na správnou část dotazu; a provádí ji databázový ovladač, nikoli programátor; těsně před provedením.

Funkce, které jste navrhli v komentářích, jsou dobrým krokem, ale stále nedostatečným, protože jsou předmětem výše uvedených nevýhod, takže jsou náchylné k nejrůznějším lidským chybám.

A SQL injection není jediným problémem tohoto přístupu, je to také chyba použitelnosti, protože tato funkce by buď zkazila vaše data, pokud by byla použita jako inkarnace pozdního kouzelné citáty , nebo aby byl váš kód nafouklý, pokud se používá k formátování každé proměnné přímo v kódu aplikace.

Takové funkce lze použít pouze ke zpracování zástupného symbolu , ale samozřejmě ne pomocí homebrewed replacement funkce, ale řádné funkce poskytované databázovým API.




  1. Správa vysoké dostupnosti v PostgreSQL – Část III:Patroni

  2. Zamykání a výkon

  3. vrátit mysql boolean jako „ano“ nebo „ne“

  4. Proč vkládat blok příkazů TSQL, když je úroveň izolace transakce pro jinou transakci serializovatelná pomocí nekonfliktního filtru?