Hi,
Afgelopen weekend kwam ik er achter dat een van mijn sites niet meer naar behoren functioneerde. Enig onderzoek leerde me dat er een aantal tabellen uit de database verdwenen waren, toevalligerwijs de vier tabellen waarin middels PostGIS ook geo-data opgeslagen stond. Erg vervelend allemaal.
Volgens mijn hoster is er waarschijnlijk sprake geweest van een SQL-injection. Ik dacht dat ik me hiervoor door mijn manier van scripten redelijk goed beschermd had, maar toch graag nog een vraag aan jullie, want allicht dat ik toch ergens iets over het hoofd heb gezien. Daar kan ik (en allicht andere ook) dan weer wat van leren.
De flow van de requests verwerkt is ongeveer zo:
1. Er komt een request naar http://mijn.site/de/pagina/die/weergegeven/moet/worden/
2. In .htaccess wordt een lookup gedaan, de url dient een bepaald formaat te hebben (netjes afgetimmerd met formules als ([a-z_-]+), ([0-9]{4}) etc.In geen van de gebruikte urls mogen andere dan alfanumerieke tekens staan, dus geen slashes, quotes, of andere ongein. Wordt de url niet herkend dan volgt een 404.
3. In het PHP script wordt gekeken of de url tidy was (dus via .htaccess binnen is gekomen). Zo niet, dan 404.
4. Er volgt nogmaals een controle op de ingevoerde variabelen volgens dezelfde formule die ook in .htaccess gebruikt wordt. Niet goed? Dan 404.
5. Er wordt gekeken of de gebruiker ingelogd is. Zo niet, dan naar inlog scherm. (403)
6. Pas nu wordt met gecontroleerde variabelen en een ingelogde gebruiker, een sql query gemaakt en in de database gezocht.
Leek mij altijd lastig om daar nog op een of andere manier een injection tussendoor te krijgen, of zit ik mis?
Afgelopen weekend kwam ik er achter dat een van mijn sites niet meer naar behoren functioneerde. Enig onderzoek leerde me dat er een aantal tabellen uit de database verdwenen waren, toevalligerwijs de vier tabellen waarin middels PostGIS ook geo-data opgeslagen stond. Erg vervelend allemaal.
Volgens mijn hoster is er waarschijnlijk sprake geweest van een SQL-injection. Ik dacht dat ik me hiervoor door mijn manier van scripten redelijk goed beschermd had, maar toch graag nog een vraag aan jullie, want allicht dat ik toch ergens iets over het hoofd heb gezien. Daar kan ik (en allicht andere ook) dan weer wat van leren.
De flow van de requests verwerkt is ongeveer zo:
1. Er komt een request naar http://mijn.site/de/pagina/die/weergegeven/moet/worden/
2. In .htaccess wordt een lookup gedaan, de url dient een bepaald formaat te hebben (netjes afgetimmerd met formules als ([a-z_-]+), ([0-9]{4}) etc.In geen van de gebruikte urls mogen andere dan alfanumerieke tekens staan, dus geen slashes, quotes, of andere ongein. Wordt de url niet herkend dan volgt een 404.
3. In het PHP script wordt gekeken of de url tidy was (dus via .htaccess binnen is gekomen). Zo niet, dan 404.
4. Er volgt nogmaals een controle op de ingevoerde variabelen volgens dezelfde formule die ook in .htaccess gebruikt wordt. Niet goed? Dan 404.
5. Er wordt gekeken of de gebruiker ingelogd is. Zo niet, dan naar inlog scherm. (403)
6. Pas nu wordt met gecontroleerde variabelen en een ingelogde gebruiker, een sql query gemaakt en in de database gezocht.
Leek mij altijd lastig om daar nog op een of andere manier een injection tussendoor te krijgen, of zit ik mis?
Through meditation I program my heart to beat breakbeats and hum basslines on exhalation -Blackalicious || *BetuweKees was AFK; op de fiets richting China en verder