Beveiliging is een manier van denken.
Als je eenmaal snapt dat je user-input altijd moet wantrouwen, dan ben je al een heel eind. Met die wetenschap kun je oude code doorspitten en waar nodig verbeteren. Daar leer je al iets van. Vervolgens ga je die kennis bij nieuwe projecten toepassen. Voor je het weet kijk je altijd kritisch naar user-input en programmeer je al voor 80% veilig.
De laatste 20% bereik je door het geheel te overzien, van de context van het geheel tot en met de details. Als je controle hebt over je programma en niet zomaar wat code hebt gekopieerd, leer je welke aannames je wel en niet kunt maken. Aannames over (shared) libs, aannames over (al dan niet versleutelde) verbindingen tussen systemen, aannames over de validiteit van RSS-feeds. Je leert hoe je moet controleren of informatie legitiem is en wat je er vervolgens mee moet doen.
In de artikelen die jij aanraadt worden alleen de details beschreven. Reguliere expresies om SQL Injection te voorkomen, huh? We leven in 2009, een tijd waarin elk DBMS een escape-functie heeft of geparameteriseede SQL-queries faciliteert. Waar je vroeger pleisters moest plakken, zorg je tegenwoordig dat je je niet meer snijdt.
Zelfs als je beveiligings-guru bent kun je fouten maken. Nou ja, Daniel Bernstein niet, maar dat is een uitzondering. Een ongeluk zit in een klein hoekje, en applicaties zijn niet meer zo eenvoudig als vroeger. Zorg er daarom voor dat je defensief programmeert (deny unless permited) en dat een gat in je front-end of database niet gelijk je OS of SAN compromitteert. Schijf bewust veilig code maar doe ook aan damage control.
…en voor er vragen komen, ja, ik ben OS3'er. Shoot me :)