Het beveiligen van je WordPress website is een aspect dat je niet kunt negeren, tenzij je de gegevens van je klanten en de online veiligheid in gevaar wilt brengen. Bovendien zou het bijhouden van de naleving van relevante normen en voorschriften ook een prioriteit moeten zijn. In de praktijk gaan beveiligingsmonitoring en compliance vaak hand in hand en zijn ze even belangrijk.

Het kan echter een uitdaging zijn om beide te implementeren, vooral als je veel sites te beheren hebt. Maar met de vele endpoints van de Kinsta API heb je programmatische toegang tot onze beveiligde site hosting, die je verder kunt automatiseren en waarmee je kunt werken.

In deze post zullen we onderzoeken hoe je de Kinsta API kunt gebruiken om je WordPress beveiliging te versterken en hoe je mogelijk verder kunt gaan dan wat het MyKinsta dashboard biedt.

We gaan ook in op de doorlopende data compliance strategie van je site. Nadat we de mogelijkheden van de Kinsta API hebben onderzocht, krijg je een praktische uitleg over hoe je beveiligingsmonitoring en compliance kunt integreren in je WordPress workflow.

Inzicht in doorlopende beveiligingsmonitoring en compliance

Je website heeft een immense waarde voor bepaalde groepen. Maar kwaadwillende gebruikers zien niet jouw producten en diensten, maar data en kansen om geld te verdienen. In 2022 ontdekte SiteLock dat de gemiddelde site ongeveer 100 aanvallen per dag te verduren kreeg.

Daarom is het van vitaal belang om je beveiliging continu te controleren en tegelijkertijd je compliance-niveau te controleren. Kwaadaardige bedoelingen zijn dynamisch, wat betekent dat je je beveiligingsvoorzieningen voortdurend moet beoordelen, bijhouden en aanpakken. De OWASP Top 10 controleert bijvoorbeeld welke soorten kwaadaardige aanvallen het populairst zijn en deze lijst verandert bij elk onderzoek.

Er zijn nog veel meer redenen waarom je continue beveiligingsmonitoring zou willen implementeren:

  • Je kunt proactief zijn als het gaat om het identificeren van en reageren op potentiële bedreigingen.
  • Regelmatige monitoring betekent dat de beveiliging van je site sterk blijft en gericht is op bescherming.
  • Je bent in staat om consistente en actuele naleving van typische industrienormen en richtlijnen voor gegevensbescherming te garanderen.
  • Je kan het risico van het ‘lekken’ van gegevens van uw site en het aantasten van je reputatie verminderen.

Voor WordPress websites is je compliance – en nalevingsstrategie nog belangrijker en uitdagender:

  • WordPress biedt inherente beveiliging, maar het platform heeft een doelwit in zijn rug, dankzij zijn grote marktaandeel.
  • Natuurlijk moet je ook de complexiteit van de thema- en plugin-ecosystemen in de gaten houden.
  • Als je meerdere sites beheert, moet je zorgen voor een consistente en betrouwbare monitoringstrategie.
  • Beveiligingsmonitoring naadloos integreren in bestaande ontwikkelingsworkflows

Het goede nieuws is dat je beveiligingsmonitoring eenvoudig kunt integreren in je bestaande workflow en kunt combineren met WordPress updatemeldingen. Sterker nog, je kunt dit regelen via de Kinsta API.

Een korte inleiding in de Kinsta API

Voor Kinsta klanten is de API de beste manier om veel aspecten van je hostingserver te automatiseren en te benutten. We bieden veel endpoints voor allerlei taken. Je kunt bijvoorbeeld sites, gebruikers en dependencies zoals sitethema’s en plugins beheren. Daarnaast kun je logs ophalen en toegang krijgen tot dezelfde applicatiegegevens vanuit het MyKinsta dashboard:

Een overzicht van het MyKinsta dashboard. Het toont recente activiteiten zoals het inschakelen van de onderhoudsmodus, het inschakelen van AFM en meldingen over de betaling van WordPress hostingpakketten. Bezoeken en gebruik van PHP en WordPress sites worden ook samengevat. De linker zijbalk biedt navigatie naar verschillende secties van de applicatie.
Het MyKinsta dashboard.

Natuurlijk zal het integreren van de Kinsta API in je WordPress workflow een fluitje van een cent zijn, gezien onze grote focus op WordPress hosting. Hoe je dit doet, lees je verderop. We bieden een proactieve en programmatische manier om je beveiligingsmonitoring voor belangrijke WordPress facetten af te handelen. Denk hierbij aan site-updates, logging en nog veel meer.

Veel hiervan sluit aan bij waar je je op zou moeten richten als het gaat om WordPress beveiliging. Laten we hier eens naar kijken.

De typische praktijken van WordPress voor beveiliging en compliance

In de kern is WordPress een sterk en veilig platform, dankzij de volwassen codebase en de strikte toepassing van veilige praktijken. Voor het content management systeem (CMS) zelf heb je officiële manieren om kwetsbaarheden te melden:

Er is zelfs een manier voor eindgebruikers om thema’s te melden – een prominente knop op de repository pagina:

Een prompt op een WordPress Theme Guide pagina met de vraag
De knop Meld dit thema voor een themapagina op WordPress.org

Het is duidelijk dat WordPress veel waarde hecht aan beveiliging en er zijn een paar belangrijke aandachtsgebieden voor de codebase van de core:

  • Regelmatige updates. WordPress brengt regelmatig updates uit voor de kernsoftware, waaronder patches voor beveiligings- en prestatieproblemen. Er zijn geautomatiseerde manieren om je core, thema’s en plugins bij te werken vanuit het WordPress dashboard
  • Sterke toegangscontrole. WordPress wordt geleverd met een volledige set gebruikersrollen waarmee je gedefinieerde toegangscontroles kunt toepassen op verschillende gebruikers. Er is ook een ingebouwde wachtwoordsterkte tool en controle voor het maken en beheren van opmerkingen.
  • Zorgen voor hostingbeveiliging. Er zijn veel verwijzingen naar veilige hosting in de documentatie van WordPress. De verwachting is dat je host dezelfde zorgplicht heeft voor je beveiliging als zijn kernteam heeft voor het CMS.

Om je te helpen bij het monitoren van sommige van deze facetten, kun je het Site Health scherm in je WordPress dashboard gebruiken:

Een dashboard voor de gezondheid van de WordPress site met een algemene status van
De pagina Site Health binnen WordPress.

Op het gebied van compliance biedt WordPress een standaard privacybeleid template voor elke installatie. Het core platform moedigt ook het gebruik van kwetsbaarheidsformulieren aan. Hier bovenop bouwen met de Kinsta API biedt een robuuste beveiligingsvoorziening – en we zullen je hierna laten zien hoe.

Hoe je beveiligingsmonitoring implementeert met de Kinsta API

Als je een setup wilt bereiken waarbij de beveiliging continu wordt gemonitord, dan is een programmatische aanpak waarschijnlijk de beste aanpak. De Kinsta API biedt veel verschillende endpoints om je op weg te helpen, hoewel het niet de enige aanpak is (waarover later meer).

Laten we een typische benadering van beveiligingsmonitoring met behulp van de API met je doorlopen. We beginnen met het ophalen van je API sleutels en gaan dan verder met de andere gebieden.

1. Verkrijg je API referenties

Zonder je API-sleutels heb je geen toegang tot enig aspect van je sites. Om een nieuwe API-sleutel te genereren, ga je naar het MyKinsta dashboard en naar het Bedrijfsinstellingen > API-sleutels scherm. Als dit je eerste keer is, zal het scherm waarschijnlijk leeg zijn:

Het scherm API-sleutels op het MyKinsta dashboard. Het scherm heeft een lege tabel met API-sleutels, hun naam en vervaldatum. Er is een prominente knop
Het API Keys pagina binnen het MyKinsta dashboard.

Klik hier op de knop API-sleutel aanmaken en vul de velden in om een vervaltijd en naam voor je sleutel in te stellen:

Het dialoogvenster API-sleutel aanmaken waarin je wordt gevraagd een vervaloptie te selecteren in een vervolgkeuzemenu en een unieke naam in te voeren om je API-sleutel te identificeren.
De Create API Key pagina pagina binnen het MyKinsta dashboard.

Zodra je op de knop Genereer klikt, kun je je API-sleutel kopiëren. Onthoud dat je deze niet meer zult zien, dus zorg ervoor dat je hem veilig bewaart:

Het dialoogvenster
Een gegenereerde API-sleutel, met de optie om te kopiëren en het proces te voltooien.

Met je nieuwe API-sleutel in de hand kun je gaan onderzoeken hoe je verbinding kunt maken met de Kinsta API.

2. Verken de beschikbare endpoints binnen de Kinsta API

We raden je aan om de API documentatie bij de hand te houden terwijl je door de beschikbare endpoints navigeert. Ze zullen niet allemaal geschikt zijn voor beveiligingsmonitoring, maar er zijn er een paar die je meer zult gebruiken dan andere:

  • sites. Gebruik dit als je een lijst met sites wilt ophalen die aan een bedrijf zijn gekoppeld. Je kunt basisinformatie teruggeven, zoals de naam, ID en status.
  • backups. Je kunt backups maken en terugzetten voor al je sites met behulp van GET en POST verzoeken. Dit is een onderdeel van je herstel na rampen en je respons bij beveiligingsincidenten.
  • logs. Dit endpoint kan gebruikt worden voor eenvoudige fout- en toegangslogs. Het zal een van je go-to endpoints zijn voor monitoring en debugging doeleinden.

We zullen meer endpoints introduceren in de volgende sectie, waar je ze zult gebruiken om je proces uit te bouwen.

3. Valideer je verbinding en haal een lijst met sites op

Voordat je een regel code aanraakt, is het een goed idee om vooruit te plannen om je doelen te verduidelijken. Kijk welke endpoints beschikbaar zijn, combineer dat met hoe je wilt dat je beveiligingsmonitoringproces eruit ziet en probeer dan alles op elkaar af te stemmen.

Je wilt bijvoorbeeld regelmatig controleren op verouderde WordPress core, thema’s en plugins. Het sites endpoint is de manier om dit te doen. Je hebt echter niet zomaar toegang tot één endpoint of je doet één verzoek per keer. Dit is waar de flexibiliteit van de Kinsta API kan schitteren.

Hier is een snel Python script om de toegang tot de API te authenticeren en een site op te halen. Eerst stellen we enkele core variabelen op. Let op dat je normaal gesproken niet je API-sleutel en bedrijfs-ID in je code opneemt. In dit geval doen we dat voor de beknoptheid en duidelijkheid.

Zodra we de variabelen hebben ingesteld, kunnen we de authenticatieheaders instellen en vervolgens de toegang valideren. Met drie korte functies kunnen we het token valideren, een lijst met sites retourneren en een specifieke site ophalen:

import requests
import os


# Define the API key and company ID within the script
api_token = 'API_KEY'
company_id = 'COMPANY_ID'

# Set the base URL for the Kinsta API
base_url = 'https://api.kinsta.com/v2'

# Set the headers for authentication
headers = {
    'Authorization': f'Bearer {api_token}'
}


def validate_token():
    """Checks and authenticates an API token.""" 
    url = f'{base_url}/validate'
    response = requests.get(url, headers=headers)

    if response.status_code == 200:
        print('API token is valid')
    else:
        print('API token is invalid')
        exit(1)


def get_sites():
    """Fetches a list of sites based on the Company ID."""
    url = f'{base_url}/sites?company={company_id}'
    response = requests.get(url, headers=headers)

    if response.status_code == 200:
        data = response.json()
        company_data = data.get('company', {})
        sites = company_data.get('sites', [])
        return sites
    else:
        print(f'Failed to fetch sites. Status code: {response.status_code}')
        return None


def get_single_site(site_id):
    """Takes a URL template and response, checks the status code, and returns JSON data if present."""
    url = f'{base_url}/sites/{site_id}'
    response = requests.get(url, headers=headers)

    if response.status_code == 200:
        site = response.json()
        return site
    else:
        print(f'Failed to fetch site. Status code: {response.status_code}')
        return None

Een main functie zal elk van deze andere processen callen, waarbij logica wordt gebruikt om de site-informatie naar een set omgevingsvariabelen te sturen:

def main():
    validate_token()
    sites = get_sites()

    if sites:
        print(f'Number of sites: {len(sites)}')
        if len(sites) > 0:
            for site in sites:
                print(f'Site ID: {site["id"]}')
                print(f'Site Name: {site["name"]}')
                print(f'Site Display Name: {site["display_name"]}')
                print(f'Site Status: {site["status"]}')
                print('Site Labels:', site["site_labels"])
                print('---')


                # Store site details in environment variables
                os.environ[f'SITE_ID_{site["name"]}'] = site["id"]
                os.environ[f'SITE_NAME_{site["name"]}'] = site["name"]
                os.environ[f'SITE_DISPLAY_NAME_{site["name"]}'] = site["display_name"]
                os.environ[f'SITE_STATUS_{site["name"]}'] = site["status"]
                os.environ[f'SITE_LABELS_{site["name"]}'] = str(site["site_labels"])


            print('Site details stored in environment variables.')
        else:
            print('No sites found')
    else:
        print('Failed to fetch sites')

Nu de toegang tot je sites compleet is, kun je andere endpoints binnenhalen voor specifieke gebruikssituaties.

4. Begin endpoints te combineren om continue beveiligingsmonitoring te creëren

Er zijn veel verschillende manieren om de Kinsta API endpoints te gebruiken voor continue en geautomatiseerde monitoring. Het met regelmatige tussenpozen ophalen van je foutenlogs is een uitstekende manier om proactief om te gaan met de beveiliging van je site.

We kunnen beginnen met hetzelfde authenticatie- en site-ophaalproces als in de vorige stap. Zodra je de site hebt die je nodig hebt, kan een korte functie toegang krijgen tot de API en de foutenlogs retourneren:

def get_error_logs():
    """Fetches error logs up to 1,000 lines."""
    url = f'{base_url}/sites/environments/{company_id}/logs?file_name=error&lines=1000'
    response = requests.get(url, headers=headers)

    if response.status_code == 200:
        logs = response.json()
        return logs
    else:
        print(f'Failed to fetch error logs. Status code: {response.status_code}')
        return None

Als je dit wilt automatiseren, moet je een pakket of bibliotheek kunnen vinden om je te helpen. Python heeft bijvoorbeeld het pakket schedule, dat met vaste intervallen een taak uitvoert. Om dit te implementeren, kunnen we een andere functie maken die logs afdrukt en deze vervolgens callen met schedule in main:

def fetch_and_print_logs():
    """Checks for error logs, and if present, prints them to screen."""
    logs = get_error_logs()

    if logs:
        print('Error Logs:')
        for log in logs:
            print(log)
        print('---')


# Schedule the log fetching task to run once a day at a specific time
schedule.every().day.at('09:00').do(fetch_and_print_logs)


#main.py
…

    while True:
        schedule.run_pending()
        time.sleep(1)

Natuurlijk kun je dit extrapoleren om met elk gewenst endpoint te werken, zoals bijvoorbeeld backups. Met wat werk zou je ook een compleet systeem kunnen bouwen om IP-adressen voor je site te automatiseren en continu te blokkeren – je hebt genoeg mogelijkheden!

De Kinsta API gebruiken in combinatie met andere WordPress plugins

De hosting van Kinsta bouwt beveiliging in het MyKinsta dashboard en de diepere architectuur in. Hierdoor kunnen gebruikers de meeste beveiligingsplugins niet installeren. Om hetzelfde niveau van functionaliteit mogelijk te maken, gebruik je gewoonlijk de tools van Kinsta, zoals de IP-blokkering.

Hoewel de Kinsta API een ‘bare metal’ manier biedt om punten te bieden voor beveiligingsmonitoring en automatisering, is er de mogelijkheid om dit te combineren met een aantal geselecteerde plugins. Hoewel we bijvoorbeeld niet toestaan dat je de logging van verkeer inschakelt (omdat het hoge IOPS veroorzaakt), kan de rest van de Wordfence plugin van waarde zijn.

Een promotiebanner voor de Wordfence plugin. De banner heeft een strakke donkere achtergrond. De naam van de plugin wordt prominent weergegeven in witte tekst, vergezeld van de tagline
De Wordfence plugin header afbeelding van WordPress.org

Wordfence biedt zelfs een paar eigen endpoints voor IP goedkeuring en het importeren van instellingen. Dat laatste kan interessant zijn als je bekende ‘goede’ instellingen wilt repliceren over veel verschillende sites. De Wordfence CLI biedt echter veel meer mogelijkheden om te combineren met onze API.

Beide samen gebruiken valt buiten het bestek van deze post, maar het is denkbaar om een child process te spawnen met Node.js om Python scripts uit te voeren, om maar een voorbeeld te noemen.

Dit betekent dat je een programmatische manier hebt om de functionaliteit van Wordfence uit te voeren en te automatiseren naast die van Kinsta. De Sucuri Security plugin heeft ook een eenvoudige API waarmee je een site scan kunt uitvoeren.

Je kunt plugins (natuurlijk) op een meer eenvoudige manier gebruiken. WP Activity Log bijvoorbeeld breidt de logfunctie van Kinsta uit. Hiermee kun je bijna elke actie registreren die op je site gebeurt, ook voor plugins van derden.

Een bannerafbeelding voor het WP Activity Log van Melapress. Het heeft een levendige groene achtergrond en bevat schone witte contouren van herkenbare pictogrammen en ontwerpelementen. De tagline van de plugin luidt
De WP Activity Log plugin header van WordPress.org

Als je de Kinsta API wilt integreren met de plugins op je site, heb je meestal API toegang tot de plugin nodig. Niet alle plugins bieden dit echter, dus het kan zijn dat je een aantal beperkingen hebt voor je favoriete plugins.

Compliance normen handhaven met WordPress en Kinsta

Als een bedrijf dat zijn controles, subprocessen en compliance laat zien, weet Kinsta genoeg over het werk dat erbij komt kijken. Als het gaat om compliancenormen, voldoen we aan die voor SOC 2 Type 2, de GDPR en de CCPA.

Een overzicht van beveiligingscontroles voor Kinsta, waaruit blijkt dat SOC 2 Type II, GDPR en CCPA compliance aanwezig is. Bronnen kunnen worden uitgebreid om drie items te bekijken: een SOC 2 Type II-document, een beveiligingsvragenlijst en een overdrachtseffectbeoordeling. 79 beveiligingscontroles kunnen worden bekeken, gecategoriseerd in Infrastructuurbeveiliging, Organisatorische beveiliging, Productbeveiliging, Interne beveiligingsprocedures en Gegevens en privacy.
Kinsta’s trust credentials overzicht van de website.

Om het vertrouwen van gebruikers te verbeteren, moet je site ook aan deze normen voldoen. De GDPR was de eerste die bijna elke site raakte. Deze verordening van de Europese Unie (EU) stelt richtlijnen op voor hoe je persoonlijke gegevens verzamelt, verwerkt en opslaat. De CCPA is een ander stuk wetgeving in dezelfde trant. Voor WordPress sites kunnen de ingebouwde privacybeleidspagina en hulpmiddelen voor gegevensexport helpen, samen met het implementeren van cookiemeldingen.

Als je in de financiële sector, de gezondheidszorg of vergelijkbare andere sectoren werkt, heb je andere wetten, normen, richtlijnen en richtlijnen die je moet volgen:

  • De Health Insurance Portability and Accountability Act (HIPAA) stelt normen voor het beschermen van gevoelige gezondheidsinformatie over patiënten. De toegangscontrole en gebruikersauthenticatiefunctionaliteit van WordPress kunnen hierbij helpen, samen met het implementeren van SSL-encryptie voor je sites.
  • De Payment Card Industry Data Security Standard (PCI-DSS) is een verzameling beveiligingsstandaarden voor sites die kaarttransacties verwerken. WordPress e-commerce sites moeten de PCI-DSS vereisten volgen. Net als bij HIPAA zijn versleutelde verbindingen voor je site belangrijk. Ook het gebruik van twee-factor-authenticatie (2FA), firewalls en betaalgateways van derden helpen je om aan de eisen te voldoen.

De infrastructuur van Kinsta kan een solide basis vormen voor je hele nalevingsstrategie, en de Kinsta API kan ook naast die van WordPress worden gebruikt. Je zou zelfs kunnen kijken naar facetten zoals het bewaken van de integriteit van bestanden met behulp van tools, services en plugins van derden.

Optimale tips voor het gebruik van de Kinsta API en WordPress voor beveiliging en compliance

Tot slot geven we je nog een paar algemene tips voor het gebruik van de Kinsta API naast WordPress. Als het gaat om de beveiliging en compliance van je site, is het belangrijk om de effectiviteit van beide te maximaliseren, omdat je dan het meeste voordeel hebt.

Een eenvoudige benadering is het gebruik van het endpoint ‘authenticatie’ om te controleren of je API-sleutel geldig is:

const resp = await fetch(
  `https://api.kinsta.com/v2/validate`,
  {
    method: 'GET',
    headers: {
      Authorization: 'Bearer <API_KEY>'
    }
  }
);


const data = await resp.text();
console.log(data);

Daarnaast wil je je API referenties altijd vertrouwelijk houden, vooral als je je code opslaat in een remote Git repo. De sterkste aanpak is om die sleutels buiten de webroot op te slaan en een van de volgende methoden te gebruiken:

  • Omgevingsvariabelen zouden een primaire overweging moeten zijn, en we raden deze aanpak aan.
  • Wrappers als je PHP gebruikt.
  • Git commando’s om de toegang tot repo’s en bestanden te beperken en gevoelige informatie te versluieren. Bijvoorbeeld git crypt, git-remote-gcrypt, of git secret.

Afgezien van het beschermen van je API-sleutels, zijn er echter nog veel meer dingen die je kunt doen om het gebruik van de Kinsta API en WordPress samen veiliger te maken:

  • Het implementeren van een goede foutafhandeling en logging kan je helpen bij het identificeren en oplossen van problemen, waardoor de betrouwbaarheid en stabiliteit van je beveiligingsmonitoring een boost krijgt.
  • Gebruik het principe van de minste privileges bij het toewijzen van gebruikersrollen en -rechten. Kortom, geef gebruikers alleen de minimale toegang die ze nodig hebben om taken uit te voeren. Controleer deze rechten ook regelmatig.

Blijf vooral op de hoogte van de huidige beveiligingspraktijken en gebruik de sterkste. Lees ook over recente kwetsbaarheden en de softwarepatches die deze bestrijden voor je thema’s en plugins. Met een regelmatige updateprocedure, gecombineerd met het automatiseren van je beveiligingsmonitoring en naleving van de Kinsta API, heb je een veerkrachtige opstelling.

Samenvatting

Bij Kinsta zijn we trots op het leveren van een sterke, stabiele en veilige hosting server. Je moet echter ook werken aan het monitoren van de beveiliging van je site. Voortdurende monitoring van de beveiliging van al je WordPress sites is essentieel.

Met de Kinsta API heb je vele programmatische manieren om je doelen te ondersteunen, zoals toegang tot logboeken, het beheren van een IP-blokkeerlijst en meer. Met sommige WordPress plugins die API toegang bieden kun je veel meer automatiseren dan alleen je server. Door die beveiligings- en compliance-taken te automatiseren, kun je aan andere bedrijfskritische zaken werken, in de wetenschap dat je site en zijn gebruikers veilig zijn.

Wat heb jij nodig van je continue beveiligingsmonitoring dat Kinsta kan leveren? Laat het ons weten in de comments hieronder!

Jeremy Holcombe Kinsta

Content & Marketing Editor bij Kinsta, WordPress Web Developer en Content Writer. Buiten alles wat met WordPress te maken heeft, geniet ik van het strand, golf en films. En verder heb ik last van alle problemen waar andere lange mensen ook tegenaan lopen ;).