Webapplicaties beveiligen: 10 best practices voor 2024

Webapplicaties beveiligen: 10 best practices voor 2024

De beveiliging van webapplicaties is een kernvraagstuk geworden voor elk bedrijf dat online zit. Cyberaanvallen nemen toe in aantal en in verfijning, en zetten gevoelige gegevens en de reputatie van organisaties op het spel. Dit artikel zet de best practices op een rij waarmee je je webapplicaties effectief beschermt tegen de dreigingen van vandaag en morgen.

De belangrijkste dreigingen begrijpen

De meest voorkomende aanvallen

Voordat we naar de oplossingen kijken, moet je weten welke soorten aanvallen webapplicaties bedreigen:

  1. SQL-injectie: kwaadaardige code in SQL-queries schuiven om de database naar je hand te zetten.
  2. Cross-Site Scripting (XSS): aanvallers injecteren kwaadaardige scripts in pagina’s die andere gebruikers bekijken.
  3. Bruteforce-aanvallen: hackers raden inloggegevens door talloze combinaties af te gaan.

Hoe de dreigingen in 2024 veranderen

Cybercriminelen passen hun technieken onophoudelijk aan. In 2024 zien we een opleving van gerichte aanvallen en een groeiend gebruik van kunstmatige intelligentie om inbraakpogingen te automatiseren en te verfijnen.

De basis van een beveiligde webapplicatie

Een robuuste authenticatie inbouwen

Stevige authenticatie is de eerste verdedigingslinie tegen ongeoorloofde toegang.

  • Wachtwoorden veilig hashen: gebruik moderne hash-algoritmes als bcrypt of Argon2 om wachtwoorden op te slaan.

Voorbeeld in PHP met password_hash() en password_verify():

php
// Het wachtwoord hashen bij de registratie
$password = $_POST['password'];
$hashedPassword = password_hash($password, PASSWORD_ARGON2ID);

// Sla $hashedPassword op in de database

// Wachtwoord controleren bij het inloggen
$storedHash = // Haal de opgeslagen hash uit de database
if (password_verify($_POST['password'], $storedHash)) {
    // Wachtwoord correct
} else {
    // Wachtwoord onjuist
}
  • Multifactorauthenticatie (2FA/MFA): leg er een extra beveiligingslaag overheen door meerdere vormen van identificatie te vragen.

Sessies veilig beheren

Zet mechanismen op om gebruikerssessies te beschermen:

  • Genereer willekeurige, complexe sessie-ID’s.
  • Laat sessies verlopen na een periode van inactiviteit.
  • Gebruik veilige cookies met de attributen HttpOnly en Secure
php
// Stel veilige sessieopties in
ini_set('session.cookie_httponly', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.cookie_secure', 1);

// Genereer bij elke login een nieuw sessie-ID
session_regenerate_id(true);

// Stel een levensduur voor de sessie in
ini_set('session.gc_maxlifetime', 3600); // 1 uur
  • Multifactorauthenticatie (2FA/MFA): leg er een extra beveiligingslaag overheen door meerdere vormen van identificatie te vragen.

Gebruikersinvoer valideren en opschonen

Beschouw alle gebruikersinvoer als potentieel gevaarlijk:

  • Valideer alle invoer streng aan de serverkant.
  • Werk met whitelists om de toegestane tekens te filteren.
  • Escape de data correct voordat je die in SQL-queries of HTML zet.
php
// Voorbeeld van validatie en opschoning van een e-mailadres
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    // Het e-mailadres is ongeldig
}

// Voorbeeld van bescherming tegen SQL-injectie met prepared statements
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->execute(['username' => $username]);
$user = $stmt->fetch();

Gevoelige gegevens beschermen

Versleuteling onderweg en in rust

Versleuteling is onmisbaar om gevoelige informatie te beschermen:

  • Gebruik TLS 1.3 om het verkeer tussen client en server te beveiligen.
  • Versleutel gevoelige gegevens die in de database staan.
php
// Versleutelen
$plaintext = "Données sensibles à chiffrer";
$cipher = "aes-256-cbc";
$key = openssl_random_pseudo_bytes(32);
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cipher));

$encrypted = openssl_encrypt($plaintext, $cipher, $key, 0, $iv);

// Ontsleutelen
$decrypted = openssl_decrypt($encrypted, $cipher, $key, 0, $iv);

HTTPS/SSL opzetten

HTTPS is geen optie meer, het is een vereiste:

  • Haal een geldig SSL/TLS-certificaat bij een erkende certificaatautoriteit.
  • Stel je server zo in dat al het HTTP-verkeer automatisch naar HTTPS wordt doorgestuurd.
.htaccess
php
# Rediriger HTTP vers HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

API’s veilig beheren

API’s zijn vaak kritieke toegangspunten:

  • Zet sterke authenticatie op de toegang tot je API’s.
  • Begrens het aantal requests om misbruik te voorkomen.
  • Gebruik JWT-tokens (JSON Web Tokens) om API-sessies veilig af te handelen.
    • Leg een vast proces vast voor het uitrollen van beveiligingspatches.
    • Abonneer je op de security advisories van de leveranciers van je software.

Opleiding en bewustwording

      • Organiseer regelmatige trainingen over de nieuwste beveiligingstechnieken.
      • Leer je gebruikers de basisregels van beveiliging (sterke wachtwoorden kiezen, phishing herkennen, enzovoort).

    Compliance en beveiligingsnormen

        • Controleer of je webapplicatie aan de geldende regelgeving voldoet (AVG, PCI DSS, enzovoort).
        • Gebruik de OWASP Top 10 als leidraad om de meest kritieke kwetsbaarheden op te sporen en te verhelpen.

      Conclusie

      Een webapplicatie beveiligen is een doorlopend proces dat blijvende aandacht vraagt. Neem je deze best practices over, dan staan je applicaties er tegenover de cyberdreigingen van vandaag en morgen een stuk beter voor.

        • Voer minstens jaarlijks een pentest uit, en na elke grote wijziging opnieuw.
        • Zet een web application firewall (WAF) neer om veel voorkomende aanvallen tegen te houden.
        • Stel alerts in op verdachte activiteit.
        • Bewaar je logs lang genoeg om forensisch onderzoek mogelijk te maken.

      Kwetsbaarheden en updates beheren

          • Leg een vast proces vast voor het uitrollen van beveiligingspatches.
          • Abonneer je op de security advisories van de leveranciers van je software.

        Opleiding en bewustwording

            • Organiseer regelmatige trainingen over de nieuwste beveiligingstechnieken.
            • Leer je gebruikers de basisregels van beveiliging (sterke wachtwoorden kiezen, phishing herkennen, enzovoort).

          Compliance en beveiligingsnormen

              • Controleer of je webapplicatie aan de geldende regelgeving voldoet (AVG, PCI DSS, enzovoort).
              • Gebruik de OWASP Top 10 als leidraad om de meest kritieke kwetsbaarheden op te sporen en te verhelpen.

            Conclusie

            Een webapplicatie beveiligen is een doorlopend proces dat blijvende aandacht vraagt. Neem je deze best practices over, dan staan je applicaties er tegenover de cyberdreigingen van vandaag en morgen een stuk beter voor.

              • Train je developers in veilig programmeren.
              • Gebruik frameworks en libraries die om hun beveiliging bekendstaan.
              • Houd regelmatig code reviews die specifiek op beveiliging gericht zijn.
              • Houd een actuele inventaris bij van al je dependencies.
              • Laat geautomatiseerde tools kwetsbaarheden opsporen in libraries van derden.
              • Pas defence in depth toe door elke laag van je infrastructuur apart te beveiligen.

            Testen en permanent monitoren

                • Voer minstens jaarlijks een pentest uit, en na elke grote wijziging opnieuw.
                • Zet een web application firewall (WAF) neer om veel voorkomende aanvallen tegen te houden.
                • Stel alerts in op verdachte activiteit.
                • Bewaar je logs lang genoeg om forensisch onderzoek mogelijk te maken.

              Kwetsbaarheden en updates beheren

                  • Leg een vast proces vast voor het uitrollen van beveiligingspatches.
                  • Abonneer je op de security advisories van de leveranciers van je software.

                Opleiding en bewustwording

                    • Organiseer regelmatige trainingen over de nieuwste beveiligingstechnieken.
                    • Leer je gebruikers de basisregels van beveiliging (sterke wachtwoorden kiezen, phishing herkennen, enzovoort).

                  Compliance en beveiligingsnormen

                      • Controleer of je webapplicatie aan de geldende regelgeving voldoet (AVG, PCI DSS, enzovoort).
                      • Gebruik de OWASP Top 10 als leidraad om de meest kritieke kwetsbaarheden op te sporen en te verhelpen.

                    Conclusie

                    Een webapplicatie beveiligen is een doorlopend proces dat blijvende aandacht vraagt. Neem je deze best practices over, dan staan je applicaties er tegenover de cyberdreigingen van vandaag en morgen een stuk beter voor.

                    php
                    function hasPermission($userId, $action) {
                        $userRole = getUserRole($userId); // Functie om de rol van de gebruiker op te halen
                        $permissions = [
                            'admin' => ['read', 'write', 'delete'],
                            'editor' => ['read', 'write'],
                            'viewer' => ['read']
                        ];
                    
                    return in_array($action, $permissions[$userRole] ?? []);
                    }
                    
                    // Gebruik
                    if (hasPermission($userId, 'write')) {
                        // Schrijfactie toestaan
                    } else {
                        // Toegang weigeren
                    }

                    Beveiliging van code en infrastructuur

                        • Train je developers in veilig programmeren.
                        • Gebruik frameworks en libraries die om hun beveiliging bekendstaan.
                        • Houd regelmatig code reviews die specifiek op beveiliging gericht zijn.
                        • Houd een actuele inventaris bij van al je dependencies.
                        • Laat geautomatiseerde tools kwetsbaarheden opsporen in libraries van derden.
                        • Pas defence in depth toe door elke laag van je infrastructuur apart te beveiligen.

                      Testen en permanent monitoren

                          • Voer minstens jaarlijks een pentest uit, en na elke grote wijziging opnieuw.
                          • Zet een web application firewall (WAF) neer om veel voorkomende aanvallen tegen te houden.
                          • Stel alerts in op verdachte activiteit.
                          • Bewaar je logs lang genoeg om forensisch onderzoek mogelijk te maken.

                        Kwetsbaarheden en updates beheren

                            • Leg een vast proces vast voor het uitrollen van beveiligingspatches.
                            • Abonneer je op de security advisories van de leveranciers van je software.

                          Opleiding en bewustwording

                              • Organiseer regelmatige trainingen over de nieuwste beveiligingstechnieken.
                              • Leer je gebruikers de basisregels van beveiliging (sterke wachtwoorden kiezen, phishing herkennen, enzovoort).

                            Compliance en beveiligingsnormen

                                • Controleer of je webapplicatie aan de geldende regelgeving voldoet (AVG, PCI DSS, enzovoort).
                                • Gebruik de OWASP Top 10 als leidraad om de meest kritieke kwetsbaarheden op te sporen en te verhelpen.

                              Conclusie

                              Een webapplicatie beveiligen is een doorlopend proces dat blijvende aandacht vraagt. Neem je deze best practices over, dan staan je applicaties er tegenover de cyberdreigingen van vandaag en morgen een stuk beter voor.

                                Toegangscontrole en rechten

                                Het principe van minimale rechten

                                Geef elke gebruiker en elk proces alleen de rechten die nodig zijn om zijn eigen taken uit te voeren.

                                Een werkbaar toegangsbeleid opzetten

                                Een eenvoudig voorbeeld van rolgebaseerde toegangscontrole:

                                php
                                function hasPermission($userId, $action) {
                                    $userRole = getUserRole($userId); // Functie om de rol van de gebruiker op te halen
                                    $permissions = [
                                        'admin' => ['read', 'write', 'delete'],
                                        'editor' => ['read', 'write'],
                                        'viewer' => ['read']
                                    ];
                                
                                return in_array($action, $permissions[$userRole] ?? []);
                                }
                                
                                // Gebruik
                                if (hasPermission($userId, 'write')) {
                                    // Schrijfactie toestaan
                                } else {
                                    // Toegang weigeren
                                }

                                Beveiliging van code en infrastructuur

                                    • Train je developers in veilig programmeren.
                                    • Gebruik frameworks en libraries die om hun beveiliging bekendstaan.
                                    • Houd regelmatig code reviews die specifiek op beveiliging gericht zijn.
                                    • Houd een actuele inventaris bij van al je dependencies.
                                    • Laat geautomatiseerde tools kwetsbaarheden opsporen in libraries van derden.
                                    • Pas defence in depth toe door elke laag van je infrastructuur apart te beveiligen.

                                  Testen en permanent monitoren

                                      • Voer minstens jaarlijks een pentest uit, en na elke grote wijziging opnieuw.
                                      • Zet een web application firewall (WAF) neer om veel voorkomende aanvallen tegen te houden.
                                      • Stel alerts in op verdachte activiteit.
                                      • Bewaar je logs lang genoeg om forensisch onderzoek mogelijk te maken.

                                    Kwetsbaarheden en updates beheren

                                        • Leg een vast proces vast voor het uitrollen van beveiligingspatches.
                                        • Abonneer je op de security advisories van de leveranciers van je software.

                                      Opleiding en bewustwording

                                          • Organiseer regelmatige trainingen over de nieuwste beveiligingstechnieken.
                                          • Leer je gebruikers de basisregels van beveiliging (sterke wachtwoorden kiezen, phishing herkennen, enzovoort).

                                        Compliance en beveiligingsnormen

                                            • Controleer of je webapplicatie aan de geldende regelgeving voldoet (AVG, PCI DSS, enzovoort).
                                            • Gebruik de OWASP Top 10 als leidraad om de meest kritieke kwetsbaarheden op te sporen en te verhelpen.

                                          Conclusie

                                          Een webapplicatie beveiligen is een doorlopend proces dat blijvende aandacht vraagt. Neem je deze best practices over, dan staan je applicaties er tegenover de cyberdreigingen van vandaag en morgen een stuk beter voor.

                                          php
                                          function generateToken($userId) {
                                              $payload = [
                                                  'user_id' => $userId,
                                                  'exp' => time() + 3600 // Verloopt over 1 uur
                                              ];
                                              return jwt_encode($payload, 'votre_clé_secrète');
                                          }
                                          
                                          function verifyToken($token) {
                                              try {
                                                  $payload = jwt_decode($token, 'votre_clé_secrète');
                                                  if ($payload->exp < time()) {
                                                      return false; // Token verlopen
                                                  }
                                                  return $payload->user_id;
                                              } catch (Exception $e) {
                                                  return false; // Ongeldige token
                                              }
                                          }
                                          
                                          // Gebruik in een API-route
                                          $token = getBearerToken(); // Functie om de token uit de header te halen
                                          $userId = verifyToken($token);
                                          if ($userId === false) {
                                              http_response_code(401);
                                              echo json_encode(['error' => 'Unauthorized']);
                                              exit;
                                          }
                                          // Doorgaan met het afhandelen van de API-request

                                            Toegangscontrole en rechten

                                            Het principe van minimale rechten

                                            Geef elke gebruiker en elk proces alleen de rechten die nodig zijn om zijn eigen taken uit te voeren.

                                            Een werkbaar toegangsbeleid opzetten

                                            Een eenvoudig voorbeeld van rolgebaseerde toegangscontrole:

                                            php
                                            function hasPermission($userId, $action) {
                                                $userRole = getUserRole($userId); // Functie om de rol van de gebruiker op te halen
                                                $permissions = [
                                                    'admin' => ['read', 'write', 'delete'],
                                                    'editor' => ['read', 'write'],
                                                    'viewer' => ['read']
                                                ];
                                            
                                            return in_array($action, $permissions[$userRole] ?? []);
                                            }
                                            
                                            // Gebruik
                                            if (hasPermission($userId, 'write')) {
                                                // Schrijfactie toestaan
                                            } else {
                                                // Toegang weigeren
                                            }

                                            Beveiliging van code en infrastructuur

                                                • Train je developers in veilig programmeren.
                                                • Gebruik frameworks en libraries die om hun beveiliging bekendstaan.
                                                • Houd regelmatig code reviews die specifiek op beveiliging gericht zijn.
                                                • Houd een actuele inventaris bij van al je dependencies.
                                                • Laat geautomatiseerde tools kwetsbaarheden opsporen in libraries van derden.
                                                • Pas defence in depth toe door elke laag van je infrastructuur apart te beveiligen.

                                              Testen en permanent monitoren

                                                  • Voer minstens jaarlijks een pentest uit, en na elke grote wijziging opnieuw.
                                                  • Zet een web application firewall (WAF) neer om veel voorkomende aanvallen tegen te houden.
                                                  • Stel alerts in op verdachte activiteit.
                                                  • Bewaar je logs lang genoeg om forensisch onderzoek mogelijk te maken.

                                                Kwetsbaarheden en updates beheren

                                                    • Leg een vast proces vast voor het uitrollen van beveiligingspatches.
                                                    • Abonneer je op de security advisories van de leveranciers van je software.

                                                  Opleiding en bewustwording

                                                      • Organiseer regelmatige trainingen over de nieuwste beveiligingstechnieken.
                                                      • Leer je gebruikers de basisregels van beveiliging (sterke wachtwoorden kiezen, phishing herkennen, enzovoort).

                                                    Compliance en beveiligingsnormen

                                                        • Controleer of je webapplicatie aan de geldende regelgeving voldoet (AVG, PCI DSS, enzovoort).
                                                        • Gebruik de OWASP Top 10 als leidraad om de meest kritieke kwetsbaarheden op te sporen en te verhelpen.

                                                      Conclusie

                                                      Een webapplicatie beveiligen is een doorlopend proces dat blijvende aandacht vraagt. Neem je deze best practices over, dan staan je applicaties er tegenover de cyberdreigingen van vandaag en morgen een stuk beter voor.

                                                      Damien Flandrin Webdeveloper sinds 2010, maker van Gekkode en Email Impact. Elk artikel wordt vóór publicatie getest op een echt project. Contact
                                                      Nieuwsbrief

                                                      Nieuwe tests, tutorials en projecten, per e-mail.

                                                      Reproduceerbare tests, geversioneerde code, gedateerde resultaten. Nooit spam.