Hey,

Ik heb een website waar mensen zelf gegevens in een form kunnen invullen ...

Deze worden dan naar een database gestuurd ...
En zo verwerkt voor verder gebruik ...

Maar hoe kan ik dit best beveiligen?
en welke gevaren zijn er?

Alvast bedankt!
Mgv,
Steven
De beste wijze is om PDO te gebruiken. Deze zal in de toekomst de standaard worden vermoed ik en is goed om je aan te leren. Hiermee zal je geen last hebben van SQL-injection. SQL Injection houd in dat mensen stukken SQL meesturen, wat catastrophale gevolgen kan hebben voor je database.

Voor meer achtergrondinformatie:
http://en.wikipedia.org/wiki/SQL_injection

Blanche heeft hier een prima tutorial over PDO geschreven:
http://www.phphulp.nl/php/tutorials/8/534/

Eigenlijk is de grootste 'truc' (eigenlijk gewoon de beste gewoonte) dat je ALLES wat je via het web krijgt toegestuurd in je programma moet wantrouwen. En ALLES moet checken of het ergens later geen kwaad kan.

Voorbeelden:
- Mensen die javascript meesturen, wat later ergens op een website staat. Deze kan de lay-out van je website verknallen, maar ook veiligheidsproblemen met zich meebrengen als: -cookies(en dus soms ook sessies!) doorspelen.

Dit heet ook wel XSS (Cross Site Scripting) http://en.wikipedia.org/wiki/Xss

Op deze eenvoudige checks zijn 90% van alle veiligheidslekken in server side software gebaseerd. Kortom: check ALLES op of het wel klopt met wat je wil dat het is.

Om dit te voorkomen zijn filters weer handig:
http://www.phphulp.nl/php/tutorials/2/531/
(Wederom een uitstekende tutorial van blanche).
Hiermee zal je geen last hebben van SQL-injection.
Een kleine aanvulling:

Als je bij PDO gebruik maakt van de query() of exec() methode om een query direct op de database uit te voeren, zul je zelf de input nog wel moeten beveiligen dmv de quote() methode.

Als je daarentegen gebruik maakt van prepared statements, is het gebruik van deze methode niet meer nodig. De execute() methode zorgt dan al voor het voorkomen van SQL injectiet.
Je hebt helemaal gelijk, bedankt voor de nuance.

Reageren