Dette isolerede eksempel er usårligt over for injektion.
Men du skal indse, at beskyttelse mod sql-injektion ikke kun er en tegnerstatning . Og omstændighederne kan afvige fra dem, du i øjeblikket tager for givet. Så din kode ville blive sårbar på lang sigt på grund af væsentlige ulemper ved denne metode :
- erstatning af tegn er kun en del af påkrævet formatering
- denne særlige erstatning kan kun anvendes på strenge, hvilket efterlader andre dele absolut ubeskyttede.
- en sådan erstatning er ekstern i forhold til en forespørgselsudførelse, hvilket betyder, at den er tilbøjelig til en menneskelig fejl af enhver art.
- en sådan erstatning er i det væsentlige en aftagelig foranstaltning, hvilket betyder, at den kan flyttes for langt væk fra den faktiske forespørgselsudførelse og til sidst glemmes.
- denne form for escape er tilbøjelig til kodningsangreb , hvilket gør løsningen for begrænset i brug.
Der er ikke noget galt med tegnerstatning i sig selv, men kun hvis det bruges som en del af komplet formatering; anvendt på den rigtige forespørgselsdel; og udført af en databasedriver, ikke en programmør; lige før udførelse.
Funktioner, du foreslog i kommentarerne, er et godt skridt, men stadig utilstrækkelige, da de er genstand for ovennævnte ulemper, hvilket gør dem tilbøjelige til alle mulige menneskelige fejl.
Og SQL-injektion er ikke det eneste problem med denne tilgang, det er også en brugervenlighedsfejl, da denne funktion enten ville ødelægge dine data, hvis den blev brugt som en inkarnation af sent magiske citater , eller gør din kode oppustet, hvis den bruges til at formatere hver variabel lige i applikationskoden.
Sådanne funktioner kan kun bruges til at behandle en pladsholder , men selvfølgelig ikke ved hjælp af en hjemmebrygget erstatningsfunktion, men en ordentlig funktion leveret af database API.