Verwijderd schreef op donderdag 10 mei 2012 @ 18:37:
Weet ik, tis ook maar iets wat tussen vrienden wordt gedeeld. We gaan binnenkort beginnen met een gezamelijk project, en daarom maak ik dit notitie systeem, zodat we overal onze notities kunnen bekijken e.d.
Dat is geen reden om daarom bescherming tegen SQL injection / XSS maar links te laten liggen

Je moet jezelf aanwennen dit
altijd te doen. Doe je dat niet dan ga je, daar kun je gif op innemen, het een keer vergeten te doen wanneer je wél te maken hebt met mensen buiten je eigen vriendenclubje. En wie zegt dat je dit project over X-maanden misschien wel niet publiek wil gooien? Ga je dan nog eens alles nalopen (met 't risico 1 dingetje over het hoofd te zien?) of gooi je 't dan open op hoop van zegen?

Neen, neeeen, néééééén!
htmlentities en consorten gebruik je in de
presentatielaag, niet om SQL injection te voorkomen

En je wil de teksten niet "met htmlentities" opslaan. Wat nu als je een keer een PDF'je wil maken van een notitie? Kun je die entities er weer uit gaan slopen. Data sla je "rauw" op (maar wel correct escapen als je querystrings gaat knutselen; beter nog: gebruik gewoon
Parametrized Queries!) en ga je pas door htmlentities (of andere escaping voor het betreffende doel (PDF, zip, Excel, RTF, CSV, whatever)) halen wanneer je
weet wat 't doel is. Je projectje is
nu nog "HTML only" maar wie weet groeit 't uit tot iets leuks waar je later een plakboek van wil gaan maken in PDF vorm. Escaping is enkel-en-alleen maar zinnig in context en in dit geval dus in je presentatielaag. Die weet de context immers; wat je in je DB stopt hoort los te staan van je context.
Aan een notitie valt weinig te sanitizen (hooguit lengte van de strings lijkt me); dat doe je (bijv.) voor een geboortedatum (in veel gevallen is een geboortedatum van voor 1900 bijvoorbeeld een rood vlaggetje; je zult niet snel een gebruikersaccount hebben van gebruikers die 100+ jaar oud zijn om maar wat te noemen) of een bestelling van 4e32 flessen melk is niet erg zinnig.
Dat is sanitizen. En een regex gebruik je om bijv. te controleren of een postcode in een zinnig formaat is ingevuld (mits je weer weet welk land en bijbehorend postcode formaat... etc.); je wil
niet regexen gebruiken om "verboden tekens" uit strings te slopen.
Linkje voor je
[
Voor 41% gewijzigd door
RobIII op 10-05-2012 18:56
]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij