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.