Beveiliging bouw je in, je plakt het er niet achteraf op
Beveiliging van web apps is geen eindchecklist voor de lancering. Tegen de tijd dat je pre-launch tests uitvoert, zijn de beslissingen die bepalen hoe veilig je applicatie is al genomen. De architectuur, het datamodel, de gekozen externe services, de manier waarop authenticatie werkt - dat alles lag maanden eerder vast. Dit artikel beschrijft vijf praktijken die we gedurende het hele ontwikkelproces toepassen om web apps veilig te houden.
1. Versleutel al het verkeer
Elk verzoek tussen jouw gebruikers en jouw applicatie moet via HTTPS verlopen. Dit versleutelt gegevens onderweg en voorkomt dat ze kunnen worden gelezen als ze worden onderschept. SSL/TLS-certificaten zijn gratis beschikbaar via de meeste hostingproviders en cloudplatforms. Er is geen goede reden om productieverkeer via HTTP te laten lopen.
2. Versleutel gevoelige gegevens in opslag, en sla ze niet op als dat niet nodig is
Als je applicatie wachtwoorden opslaat, moeten ze worden gehasht met een modern algoritme zoals bcrypt of Argon2, nooit opgeslagen als leesbare tekst of met omkeerbare encryptie. Voor andere gevoelige gegevens zoals betalingsinformatie of identiteitsdocumenten, is de eerste vraag of je ze überhaupt hoeft op te slaan. Gegevens die je niet bewaart, kunnen niet worden gestolen. Als je ze wel moet opslaan, versleutel ze dan op veld- of rijniveau, niet alleen op schijfniveau.
3. Voer beveiligingsscans uit
Geautomatiseerde beveiligingsscanners testen je draaiende applicatie op veelvoorkomende kwetsbaarheden, waaronder injectie-aanvallen, gebrekkige authenticatie en blootgestelde gevoelige gegevens. Het regelmatig uitvoeren hiervan, en zeker voor elke grote release, ontdekt problemen die codereview alleen mist. Veel scanners zijn beschikbaar als onderdeel van een CI-CD-pipeline, zodat de scan automatisch bij elke build plaatsvindt.
4. Voer statische codeanalyse uit
Statische analysetools onderzoeken je broncode zonder deze uit te voeren. Ze identificeren patronen die verband houden met bekende kwetsbaarheidsklassen: SQL-injectie, cross-site scripting, onveilige deserialisatie en andere. Het integreren van een statisch analysetools in je ontwikkelworkflow betekent dat deze controles bij elke commit plaatsvinden in plaats van als eenmalige oefening.
5. Controleer je beveiligingsheaders
HTTP-beveiligingsheaders vertellen browsers hoe ze zich moeten gedragen bij het laden van jouw applicatie. De Content-Security-Policy header beperkt welke resources de browser laadt, wat het aanvalsoppervlak voor cross-site scripting verkleint. De Strict-Transport-Security header dwingt HTTPS af. X-Frame-Options voorkomt dat je pagina's worden ingebed in iframes op andere domeinen. Deze zijn eenvoudig te configureren en maken een meetbaar verschil in de beveiligingspositie van je applicatie.
Beveiliging is een van de gebieden waar de kosten van het oplossen van problemen aanzienlijk toenemen naarmate de tijd verstrijkt. Problemen die tijdens de ontwikkeling worden ontdekt, zijn goedkoop op te lossen. Problemen die in productie worden ontdekt, zijn dat niet.
Neem contact met ons op voor meer informatie over hoe we beveiliging inbouwen in ons web app ontwikkeling proces.