Wat er bovenaan staat in de lijsten is geen verrassing: slechte validatie van invoer, SQL injection, cross site scripting, buffer overflows - de bekende soorten fouten die regelmatig in het nieuws zijn
100% mee eens. Ik heb de soms ietwat twijfelachtige eer om met name junior programmeurs te begeleiden in mijn team. Je wilt gewoon niet weten hoeveel dingen die voor jou en mij zo enorm voor de hand liggend lijken, totaal onbekend zijn bij mensen.
Ik weet dat niet iedereen overtuigd is van de waarde van een opleiding en dat een opleiding niet garandeerd dat iemand een goede programmeur is, maar dan heeft zo iemand tenminste een aantal basics gehad.
Als ik zie dat programmeurs soms nog nooit van het welbekende MVC model hebben gehoord, of geen idee hebben wat een foreign key is, wat een prepared statement is, of wat een transactie is, hoe gaan ze dan veilige software bouwen?
Als je MVC een beetje goed opzet dan is input validatie bijna een natuurlijk iets. Je bent gek als je dat niet doet. Echter, in die super rommelige PHP of JSP pagina's waar men code met HTML mixed en overal lukraak het request object benaderd om er weer een of andere parameter ter plekke uit te halen, ja, dan is het logisch dat veel validatie er tussen door glipt.
Als je al niet weet wat een prepared statement is, hoe ga je dan de gevaren van SQL injection te lijf? Zelfs als de programmeur op de hoogte is van het gevaar, dan gaat ie 9 van de 10 keer rare dingen doen als ( !if userId.contains("'") { ... execute SQL } )
En als men niet weet wat een transactie is, hoe gaat met dan de consistentie van een DB garanderen?
Wat ik in de praktijk veel merk is dat veel van die 'mannetjes' denken wel even snel te kunnen programmeren en dat al die 'theorie' tegenwoordig helemaal niet meer nodig is. Je hoort ze dan dingen zeggen als "PHP is zo eenvoudig en al dat moeilijke gedoe met patterns enzo is in de moderne dynamische wereld helemaal niet meer nodig".
Tsja... en dan krijg je dus al die ellende...
Sorry hoor... Ik voel me als junior PHP programmeur die niet weet wat een MVC model is toch wel aangesproken. Ik vind namelijk dat je alles zo over 1 kam scheert.
Ik ben het met je eens dat SQL injection echt iets super belangrijks is waar iedere webmaster op moet letten, maar om dan al bijna te concluderen dat je prepared statements nodig hebt om SQL injection te lijf te gaan, gaat wel heel ver.
Ik heb geen MVC model of prepared statements nodig om SQL injecties tegen te gaan. PHP biedt daarvoor een functie die vaak al genoeg bescherming biedt: mysql_real_escape_string().
(Tenminste, daar ga ik wel vanuit. Ik krijg tientallen dagelijks hackpogingen

stommelingen...)
Daarnaast moet een HBO Informaticus ook weten dat je niet perse transacties nodig hebt om je DB consistent te houden. Je kunt vaak al consistency server-side afdwingen.
En tuurlijk, er zijn 'mannetjes' die denken dat kunnen programmeren, terwijl ze belangrijke dingen nog niet weten. Maar ja, dat kun je ook wel verwachten van junior programmeurs. Daarom zijn ze nog junior

.
[Reactie gewijzigd door Rex op woensdag 14 januari 2009 01:08]
Ik denk dat als je bewust bent van de problemen dat je ook als junior niet alles hoeft te weten. En sqlinjectie voorkomen is iets wat met prepared statements heel makkelijk kan. Realescape string is met een kanon op een mug schieten. MVC patroon moet je je eens in verdiepen kan wel handig zijn, maar niet exclusief voor beveiligingsproblemen flowerp zegt alleen dat het makkelijker is om hiermee je veiligheid in te bouwen.
Daarnaast moet een HBO Informaticus ook weten dat je niet perse transacties nodig hebt om je DB consistent te houden. Je kunt vaak al consistency server-side afdwingen.
Waarom zou ik iets zelf nog weer gaan uitprogrammeren wanneer bijvoorbeeld Oracle dat veel beter kan.
Wat nou als jouw serverside applicatie om wat voor reden dan ook midden in een
transactie de pijp aan maarten geeft. Gebruik je de transactie functionaliteit van de database: geen probleem... Heb je zelf iets in jouw serverside applicatie uitgeprogrammeerd... bad luck.
En nee, ik heb het niet over applicatietjes met enkele tabellen... Ik heb het over applicaties met honderden zo niet duizenden tabellen...
Tsja, ik zeg alleen maar dat je transacties niet altijd nodig hebt. Het is wel makkelijk, maar sommige databasesystemen ondersteunen het niet, zoals MySQL. Daar kun je dan in de configuratie een afweging maken tussen consistency en scalability.
ik voel me aan gevallen door jou opmerking "ook wel te verwachten van junior programmeur". je kunt dit niet gaan generaliseren of te wel alles over een kam scheren.
ik heb gezien dat senioren(met mcad diploma's) ook liggen te prutsen zoals geen stored procedures gebruiken, liggen te klooien met linq(zonder eerst goed in te verdiepen). geen validatie doen op input types etc...
zo weet ik dat hogeschool zuyd niks doet aan veiligheid programmeren. aangezien deze school bekroont is als beste hogeschool van nederland. ga ik er van uit dat de rest van de hogescholen in nederland hier ook geen aandacht aanbesteden..
dit ligt niet aan de persoon zelf eerder de opleiding die hij gevolgd..
Mwa, op Avans Hogeschool (Den Bosch) heb ik een docent gehad die echt alles stuk kreeg

. Heel veel van geleerd op dit gebied!
[Reactie gewijzigd door Rick2910 op woensdag 14 januari 2009 14:01]
Daar praat je ook over een rotschool (heb er gezeten)
Beste hogeschool van Nederland? Qua PR mischien
Hun IT-opleidingen zijn bar slecht
De beste IT-opleidingen van dit land zijn @avans Den Bosch
Al mogen ze daar ook wel wat meer aandacht aan veiligheid geven idd
Ach, ik bedoel het ook niet slecht. Het is een leerproces en je leert elke dag weer wat nieuws. Wat ik alleen wilde zeggen is dat je niet van junior programmeurs moet verwachten dat ze meteen alles kennen en kunnen.