Data die in je systeem zit zou je niet als veilig moeten zien.
Stel dat, om wat voor reden dan ook, gebruikersnamen of andere teksten van een profield de input "</div>" toestaan. Als je dit vervolgens zonder escaping weergeeft ligt je layout in puin. En zo zijn er nog wel andere zaken denkbaar zoals AJAX-calls naar een externe site als jij een profiel bekijkt ofzo... Escape altijd output, tenzij je een speciale, en gedocumenteerde, reden hebt om dat niet te doen.
En om toch terug te komen op het voorgaande, vergelijk:
De vraag is dan elke keer opnieuw: is $condition gevalideerd / veilig? Of beter gezegd: is dat een query die altijd het gewenste resultaat geeft? Iedereen die dat stuk code ziet zou zich dat af moeten vragen. Dat kost elke keer weer (interpretatie)tijd.
Vergelijk dit met:
Waarbij $db->escape() een shorthand is voor real_escape_string(). Het maakt in dat geval niet uit of $condition veilig was voor gebruik in een query of niet - de combinatie escaping-functie + quotes garandeert dit. Op een soortgelijke wijze zou je prepared statements kunnen gebruiken, ook dat is een methode om te waarborgen dat DATA niet als SQL geinterpreteerd kan worden (dit is in feite wat SQL-injectie mogelijk maakt).
Het dilemma in het eerste fragment is dus altijd of escaping bewust achterwege is gelaten of per ongeluk is vergeten. Je introduceert hiermee twijfel. Als je gewoon consequent alles escaped is er NOOIT ruimte voor twijfel. Zodat je hier dan ook nooit meer over na hoeft te denken.
Stel dat, om wat voor reden dan ook, gebruikersnamen of andere teksten van een profield de input "</div>" toestaan. Als je dit vervolgens zonder escaping weergeeft ligt je layout in puin. En zo zijn er nog wel andere zaken denkbaar zoals AJAX-calls naar een externe site als jij een profiel bekijkt ofzo... Escape altijd output, tenzij je een speciale, en gedocumenteerde, reden hebt om dat niet te doen.
En om toch terug te komen op het voorgaande, vergelijk:
De vraag is dan elke keer opnieuw: is $condition gevalideerd / veilig? Of beter gezegd: is dat een query die altijd het gewenste resultaat geeft? Iedereen die dat stuk code ziet zou zich dat af moeten vragen. Dat kost elke keer weer (interpretatie)tijd.
Vergelijk dit met:
Waarbij $db->escape() een shorthand is voor real_escape_string(). Het maakt in dat geval niet uit of $condition veilig was voor gebruik in een query of niet - de combinatie escaping-functie + quotes garandeert dit. Op een soortgelijke wijze zou je prepared statements kunnen gebruiken, ook dat is een methode om te waarborgen dat DATA niet als SQL geinterpreteerd kan worden (dit is in feite wat SQL-injectie mogelijk maakt).
Het dilemma in het eerste fragment is dus altijd of escaping bewust achterwege is gelaten of per ongeluk is vergeten. Je introduceert hiermee twijfel. Als je gewoon consequent alles escaped is er NOOIT ruimte voor twijfel. Zodat je hier dan ook nooit meer over na hoeft te denken.
The post was edited 2 times, last by FangorN ().