De vraag van wanneer er sprake is van wanprestatie komt voort uit een huidig project dat ik voor een klant uitvoer en waar ik graag eens een discussie op gang over wil brengen. Als allereerste wil ik benadrukken dat ik ook niet foutvrij ben en dat iedere software fouten zal bevatten maar naar mijn mening is er een bepaalde grens tot wat acceptabel is.
De case dit ik hier nu heb ik is een relatief grote webwinkel ontwikkeld door een professionele internet dienstverlener. Ik ben door de eigenaar gevraagd om dit systeem eens onder de loop te nemen, met name omdat de Google ranking gewoon dramatisch is. Uiteindelijk wilde ze gewoon een totaal rapport met mijn mening over het systeem. De ontwikkeling loopt sinds 2007 en het is geschreven in PHP.
Naast de vele kleinere dingetjes zijn er ook een aantal hard aan te wijzen punten, voornamelijk op het gebied van beveiliging:
- Volledig procedurele code zonder enige scheiding van opmaak en code
- Geen parameterized query's (MYSQL extensie ipv MYSQLi of PDO)
- SQL injection op verschillende plaatsen mogelijk
- XSS op verschillende plaatsen mogelijk (oa in het bestel systeem, wat wss ook getoond wordt in de backend)
- CSRF
- MD5 passwords zonder salt
- Sessie systeem door gebruikersnaam en md5 hash in een cookie te plaatsen (en gaat gewoon weer ongeëscaped een query in, cookies kan je toch niet faken?)
- Externe scripts die de site weer aanroepen en heel effectief de site kunnen DoS'en
Ze worden voor het grootste gedeelte qua sql injectie nog gered door magic quotes, anders vrees ik dat ik onbeperkt had kunnen winkelen (wat misschien nog steeds kan, maar ik heb niet de broncode van de site, slecht van enkele pagina's). Daarnaast zal een specialiseert security bedrijf wss nog wel VEEL meer gaan vinden.
De boel is ook extreem sloom. Het draait op een eigen cluster en de frontpage is gebenched met ab op 17 requests / sec. Dit komt voornamelijk doordat een pagina 265 requests nodig heeft om te laden en omdat er voor ieder plaatje en dingetje een aparte query naar de database gaat. De grote selects zijn gecached maar al die kleine query's niet.
Zoals te verwachten ontkent de leverancier dat er ook maar iets mis is. En hoewel ik geen prijzen weet, zal die site niet goedkoop geweest zijn. Ik vrees dat de meesten hier wel 1 of 2 jaar bereid zijn om fulltime voor dat bedrag te werken
Ik zit me af te vragen wat ik de site eigenaar moet adviseren, maar nog liever zou ik deze discussie ook eens wat algemener voeren. Is er een grens tot waar een leverancier kan gaan waarna je hem gewoon in gebreken kan stellen of eventueel je geld terugeisen? Software kwaliteit is nu niets iets wat makkelijk te meten is en de opdrachtgever heeft er ook niks over afgesproken. Maar je zou toch verwachten dat je kwaliteit krijgt als je zo'n enorme investering doet. De klant heeft zich ook nooit met de kwaliteit beziggehouden behalve "dat het niet goed zat", waarna er maanden aan een update gewerkt is, uiteraard op kosten van de klant die de boel eigenlijk alleen maar verslechterd heeft.
De case dit ik hier nu heb ik is een relatief grote webwinkel ontwikkeld door een professionele internet dienstverlener. Ik ben door de eigenaar gevraagd om dit systeem eens onder de loop te nemen, met name omdat de Google ranking gewoon dramatisch is. Uiteindelijk wilde ze gewoon een totaal rapport met mijn mening over het systeem. De ontwikkeling loopt sinds 2007 en het is geschreven in PHP.
Naast de vele kleinere dingetjes zijn er ook een aantal hard aan te wijzen punten, voornamelijk op het gebied van beveiliging:
- Volledig procedurele code zonder enige scheiding van opmaak en code
- Geen parameterized query's (MYSQL extensie ipv MYSQLi of PDO)
- SQL injection op verschillende plaatsen mogelijk
- XSS op verschillende plaatsen mogelijk (oa in het bestel systeem, wat wss ook getoond wordt in de backend)
- CSRF
- MD5 passwords zonder salt
- Sessie systeem door gebruikersnaam en md5 hash in een cookie te plaatsen (en gaat gewoon weer ongeëscaped een query in, cookies kan je toch niet faken?)
- Externe scripts die de site weer aanroepen en heel effectief de site kunnen DoS'en
Ze worden voor het grootste gedeelte qua sql injectie nog gered door magic quotes, anders vrees ik dat ik onbeperkt had kunnen winkelen (wat misschien nog steeds kan, maar ik heb niet de broncode van de site, slecht van enkele pagina's). Daarnaast zal een specialiseert security bedrijf wss nog wel VEEL meer gaan vinden.
De boel is ook extreem sloom. Het draait op een eigen cluster en de frontpage is gebenched met ab op 17 requests / sec. Dit komt voornamelijk doordat een pagina 265 requests nodig heeft om te laden en omdat er voor ieder plaatje en dingetje een aparte query naar de database gaat. De grote selects zijn gecached maar al die kleine query's niet.
Zoals te verwachten ontkent de leverancier dat er ook maar iets mis is. En hoewel ik geen prijzen weet, zal die site niet goedkoop geweest zijn. Ik vrees dat de meesten hier wel 1 of 2 jaar bereid zijn om fulltime voor dat bedrag te werken
Ik zit me af te vragen wat ik de site eigenaar moet adviseren, maar nog liever zou ik deze discussie ook eens wat algemener voeren. Is er een grens tot waar een leverancier kan gaan waarna je hem gewoon in gebreken kan stellen of eventueel je geld terugeisen? Software kwaliteit is nu niets iets wat makkelijk te meten is en de opdrachtgever heeft er ook niks over afgesproken. Maar je zou toch verwachten dat je kwaliteit krijgt als je zo'n enorme investering doet. De klant heeft zich ook nooit met de kwaliteit beziggehouden behalve "dat het niet goed zat", waarna er maanden aan een update gewerkt is, uiteraard op kosten van de klant die de boel eigenlijk alleen maar verslechterd heeft.