Bekijk & installeer je badge
Probeer de stijlen hieronder om precies te zien wat je bezoekers zien. Als je klaar bent, staat je persoonlijke code in je dashboard klaar - geen programmeerkennis nodig.
Bekijk je stijl
Kies hieronder een stijl, grootte en kleur om je badge live te zien. Dit is alleen een voorbeeld - inloggen is niet nodig.
Kopieer je code uit het dashboard
Inloggen en PCrisk geeft je een kant-en-klare snippet met je gekozen stijl erin verwerkt - die werkt op elk domein in je account.
Plakken, opslaan & publiceren
Voeg hem toe aan je site. Zodra je domein de dagelijkse scan doorstaat, verschijnt de badge automatisch.
Geen cookies, geen tracking, ~7 KB. De badge laadt na je pagina (dus vertraagt die nooit), slaat niets over je bezoekers op en plaatst geen cookies.
De badge verschijnt alleen wanneer je laatste scan schoon is. Als je je net hebt aangemeld, geef je eerste scan dan even de tijd om te voltooien. Een lege ruimte betekent simpelweg “nog niet als schoon bevestigd” - niet dat de code kapot is.
Platformgidsen
Twee manieren om de badge toe te voegen: installeer onze plugin of plak de snippet uit je dashboard. Kies hieronder je platform - beide kosten maar een paar minuten.
WordPress
Makkelijkst - installeer de gratis plugin, geen code:
- Ga in je WordPress-dashboard naar Plugins → Nieuwe plugin.
- Zoek naar PCrisk Trust Badge.
- Klik op Nu installeren, daarna Activeren.
- Open Trust Badge verbind in het beheermenu je site en kies daarna een stijl en waar de badge verschijnt. De live preview toont precies wat bezoekers zien.
Gebruik je WooCommerce? De plugin detecteert dit automatisch en voegt winkelplaatsingen toe - winkelpagina, productpagina's, winkelwagen en afrekenen - naast je sitebrede plek. Niets extra's om te installeren.
Kun je geen plugins installeren? Plak dan het fragment uit je dashboard in een footer-codevak - bijvoorbeeld de gratis “WPCode” plugin, of Weergave → Thema-bestandseditor (maak eerst een back-up).
ShopifyBinnenkort
Onze Shopify-app komt eraan. Die is nu in ontwikkeling - installatie met één klik, geen themacode, met plaatsingen voor product-, winkelwagen- en checkoutpagina’s. Tot die tijd kun je de badge toevoegen met de snippet hieronder.
In de tussentijd:
- Ga in Shopify-beheer naar Online Store → Themes.
- Klik in je huidige thema op ⋯ -> Code bewerken.
- Open layout/theme.liquid en plak de snippet uit je dashboard vlak voor de afsluitende </body> tag.
- Opslaan. De badge verschijnt op elke pagina van je winkel.
Wix
- Ga naar Instellingen → Aangepaste code in je sitedashboard.
- Klik op + Aangepaste code toevoegen, plak de snippet en stel in dat die laadt op Alle pagina's, geplaatst in de Body - einde.
- Toepassen & publiceren.
Squarespace
- Ga naar Instellingen → Geavanceerd → Code Injection.
- Plak de snippet in het Footer vak.
- Opslaan. (Code Injection vereist een Business-abonnement of hoger.)
Webflow, Framer & aangepaste HTML
Webflow: Project Instellingen → Aangepaste code → plak in het Footer Code vak → publiceren.
Framer: Site Settings → General → Custom Code → Einde van de <body>-tag.
Handmatig gecodeerde sites: plak de snippet vlak voor </body> in je template- of layoutbestand.
Pas je badge aan
Je keuzes staan als data-* attributen op de plaatsing van de snippet <div> - de dashboardontwerper stelt ze allemaal in wanneer hij je code genereert. Wil je later de stijl aanpassen, kies daar een nieuwe look en plak het bijgewerkte fragment over het oude. Dit regelt elk attribuut.
| Attribuut | Waarden | Wat het doet |
|---|---|---|
data-style | shield, ribbon, minimal, bubble | De algemene vorm en lay-out van de badge. |
data-size | small, medium, large | Algemene grootte van de badge. |
data-theme | light, dark, auto | Past bij de achtergrond van uw site. auto volgt de eigen lichte of donkere modus van uw site. |
data-position | bottom-right, bottom-left, top-right, top-left | Zet de badge vast in die schermhoek - werkt met elke stijl. Laat je dit weg, dan wordt de badge inline weergegeven in zijn <div>. |
Wil je hem op een exacte plek, zoals midden in het afrekenen? De <div> in je fragment IS de plek van de badge - zet hem waar de badge moet verschijnen (hij reserveert zelfs de ruimte van de badge, zodat je lay-out nooit verspringt). Badges op meerdere plekken? Plak meer divs; de script-tag hoeft maar één keer te staan. Zwevende badges - elke stijl met data-position - negeren waar hun div staat: ze worden vastgezet in de hoek die je kiest.
Badge niet zichtbaar?
Doorloop deze op volgorde - de eerste twee lossen veruit de meeste gevallen op.
Geef het even de tijd - en controleer of je laatste scan schoon is
De badge wordt alleen getoond als je meest recente dagelijkse scan schoon is. Dit is bewust zo - zo blijft de betekenis van de badge intact en wordt hij nooit getoond op een gecompromitteerde site.
Als je hem net hebt geïnstalleerd:
- Controleer je PCrisk dashboard - staat er “Badge actief” naast je domein?
- Als een scan nog loopt, wacht dan tot die klaar is en vernieuw daarna je pagina.
- Als je site is gemarkeerd, los het probleem op; de badge komt automatisch terug na de volgende schone scan.
Je site heeft een Content Security Policy (geavanceerd)
Goed nieuws: 9 van de 10 sites kunnen dit overslaan. Een Content Security Policy (CSP) is een geavanceerde beveiligingsinstelling die je bewust moet inschakelen. Heb je er nog nooit van gehoord, dan heb je er vrijwel zeker geen - en is dit niet jouw probleem.
Zie een CSP als een gastenlijst voor je website - die laat alleen diensten toe die je hebt goedgekeurd. Heb je er een, voeg PCrisk dan toe aan de lijst met deze vermeldingen:
script-src https://scanner.pcrisk.com
connect-src https://scanner.pcrisk.com
style-src 'unsafe-inline'
De style-src regel is alleen nodig als je beleid stijlen beperkt (bijv. het stelt style-src of alleen default-src): de badge past zijn ontwerp toe via een inline <style> element, dus zonder dit laadt de badge maar blijft onzichtbaar.
Snelle routes:
• WordPress-beveiligingsplugin (Wordfence, Really Simple Security, enz.): open de instellingen en voeg deze items toe aan het gedeelte Content Security Policy.
• Cloudflare: je site → Security → Settings → je CSP-regel → voeg deze items toe.
• Wix / Squarespace / standaard Shopify: niets te doen - deze gebruiken geen aangepast beleid, dus de badge werkt gewoon.
Niet zeker, of verschijnt hij nog steeds niet? Kopieer dit bericht en stuur het naar degene die je website beheert (je ontwikkelaar of hostingondersteuning) - die weet precies wat te doen:
script-src https://scanner.pcrisk.com en connect-src https://scanner.pcrisk.com. Als ons beleid inline stijlen blokkeert, sta dan ook toe 'unsafe-inline' in style-src. Bedankt!Een adblocker of privacy-extensie verbergt hem
Sommige agressieve adblockers of privacy-extensies (of browsers zoals Brave met strikte shields) kunnen scripts van derden blokkeren. Controleer dit door je site te openen in een privé-/incognitovenster met extensies uitgeschakeld, of pauzeer je blocker tijdelijk.
Dit treft alleen het kleine deel bezoekers dat zulke tools gebruikt - de meeste mensen zien de badge normaal. De badge zelf plaatst geen cookies en volgt niets, waardoor dit zeldzaam blijft.
Controleer of de badge op een toegevoegd domein staat
De badge controleert het exacte domein waarop hij is geladen. Als je example.com hebt toegevoegd maar de snippet draait op een ander subdomein (zoals shop.example.com), een staging-URL, of localhost, dan vindt hij geen overeenkomst.
Zorg dat de pagina met de badge op een domein staat dat je in je dashboard hebt toegevoegd. Nodig op meerdere subdomeinen? Voeg ze allemaal toe aan je account.
Inline badge: heb je de container toegevoegd?
Inline badges (elke stijl zonder data-position) renderen in de plaatsing <div class="pcrisk-badge"> uit je snippet - zorg dat die div samen met de script-tag op de pagina staat (sommige page builders verwijderen divs maar laten scripts staan). Geen div en geen data-* attributen op de script-tag betekent dat de engine nergens kan renderen.
Hoe bezoekers dit verifiëren
Een badge die iedereen kan namaken wekt geen vertrouwen. Die van ons is onafhankelijk verifieerbaar - dat maakt hem het tonen waard.
Klik opent een live rapport
Elke badge is klikbaar. Bezoekers komen op je openbare rapport op scanner.pcrisk.com - door ons gehost, niet door jou - met de nieuwste scan en vertrouwensscore.
Onafhankelijk van opzet
Omdat het rapport op een domein staat dat bezoekers niet beheren, is het resultaat betrouwbaar - net zoals een browserhangslot onafhankelijk is van de site erachter.
Tip: de rapportlink is los deelbaar. Zet hem in facturen, partnerpagina's of supportmails wanneer je de huidige veiligheidsstatus van je site moet aantonen.
Wat gebeurt er als een dreiging wordt gedetecteerd
Je toont nooit een “geverifieerd” keurmerk op een gecompromitteerde site.
We waarschuwen je snel
Zodra een scan een probleem markeert, krijg je een gedetailleerde e-mail - ernst, wat er is gevonden, waar, en hoe je het oplost.
De badge verbergt zichzelf
Je badge wordt automatisch verwijderd tot het probleem is opgelost - en komt terug zodra een vervolgscan bevestigt dat je site weer schoon is.
Slack- en webhookmeldingen
Ontvang dezelfde meldingen als per e-mail - dreiging gevonden, alles veilig, scan kon niet worden voltooid - naar Slack of je eigen endpoint gestuurd, op dezelfde momenten. Stel beide in via je dashboard onder Instellingen → Meldingsintegraties.
Slack
Maak in Slack een Incoming Webhook voor het gewenste kanaal (Slack: Apps → Incoming Webhooks → Add to a channel), plak de hooks.slack.com URL in je dashboard en klik op Slack-test verzenden. Dat is de hele setup - geen code nodig.
Webhooks
We POST JSON naar je HTTPS-endpoint. Vier gebeurtenistypen:
• alert.geopend - een scan markeerde de site (score onder 70); de badge is gepauzeerd.
• alert.opgelost - een latere scan was schoon; de badge is hersteld.
• scan.mislukt - de dagelijkse scan kon niet worden voltooid (site onbereikbaar); eenmaal per storing verzonden.
• test - de Webhook-test verzenden knop.
{
"event": "alert.opened",
"domain": "example.com",
"trust_score": 55,
"threat_type": "suspicious",
"severity": "medium",
"occurred_at": "2026-07-07T08:28:36.874Z"
}
Elk verzoek bevat drie headers: Content-Type: application/json, X-PCrisk-Event (het eventtype), en X-PCrisk-Signature - sha256= gevolgd door de hex SHA-256 HMAC van de ruwe requestbody, met als sleutel het signing secret dat in je dashboard staat. Verifieer dit voordat je een levering vertrouwt.
Leveringssemantiek: we wachten maximaal 5 seconden op een reactie en tellen elke 2xx als geaccepteerd; een mislukte levering wordt eenmaal opnieuw geprobeerd, ~15 seconden later, en daarna verwijderd. Behandel webhooks als meldingen, niet als een logboek - je dashboard is de bron van waarheid.
Verifieer tegen de ruwe body. De handtekening dekt de exacte bytes die we verzenden. Als je framework JSON parseert voordat je de ruwe body kunt lezen (bijv. een globale express.json()), zal het opnieuw serialiseren van het geparste object niet dezelfde bytes opleveren - leg de ruwe body vast, zoals elk voorbeeld hieronder doet.
const crypto = require('crypto');
const express = require('express');
const app = express();
// express.raw keeps the body as the exact bytes we signed
app.post('/hooks/pcrisk', express.raw({ type: 'application/json' }), (req, res) => {
const expected = 'sha256=' + crypto
.createHmac('sha256', process.env.PCRISK_WEBHOOK_SECRET)
.update(req.body) // Buffer
.digest('hex');
const given = req.get('X-PCrisk-Signature') || '';
const ok = given.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(given), Buffer.from(expected));
if (!ok) return res.status(401).end();
const event = JSON.parse(req.body);
console.log(event.event, event.domain, event.trust_score);
res.status(200).end(); // any 2xx marks the delivery as accepted
});
app.listen(3000);
<?php
$secret = getenv('PCRISK_WEBHOOK_SECRET');
$raw = file_get_contents('php://input'); // raw body, before any parsing
$given = $_SERVER['HTTP_X_PCRISK_SIGNATURE'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $raw, $secret);
if (!hash_equals($expected, $given)) {
http_response_code(401);
exit;
}
$event = json_decode($raw, true);
// $event['event'], $event['domain'], $event['trust_score'], ...
http_response_code(200); // any 2xx marks the delivery as accepted
import hashlib, hmac, os
from flask import Flask, request, abort
app = Flask(__name__)
SECRET = os.environ["PCRISK_WEBHOOK_SECRET"].encode()
@app.post("/hooks/pcrisk")
def pcrisk_hook():
raw = request.get_data() # raw body, before parsing
expected = "sha256=" + hmac.new(SECRET, raw, hashlib.sha256).hexdigest()
given = request.headers.get("X-PCrisk-Signature", "")
if not hmac.compare_digest(expected, given):
abort(401)
event = request.get_json()
# event["event"], event["domain"], event["trust_score"], ...
return "", 200 # any 2xx marks the delivery as accepted
# run with: flask --app hook run --port 3000
Wijzig je endpoint? Sla de nieuwe URL op in het dashboard en stuur een test - het signing secret blijft hetzelfde voor je account. Alerts zijn per incident (één alert.geopend per onder-70-episode, niet één per scan), zodat je kanaal niet wordt overspoeld door een site die gemarkeerd blijft.
REST API
Haal je domeinen, scores, scangeschiedenis en alerts op in je eigen dashboards, rapporten en monitoring. Leestoegang op Pro; het Business abonnement voegt domeinbeheer toe. De API toont alleen uw eigen gemonitorde domeinen.
Authenticatie
Maak een sleutel aan in uw dashboard onder Instellingen → API-sleutels (deze wordt één keer getoond - wij slaan alleen een hash op) en verstuur die als Bearer-token. Sleutels nemen hun rechten over van uw huidige plan, en intrekken in het dashboard schakelt ze direct uit.
curl https://scanner.pcrisk.com/api/v1/domains -H "Authorization: Bearer pcrisk_live_YOUR_KEY"
{
"success": true,
"data": [
{
"domain": "example.com",
"status": "verified",
"trust_score": 92,
"threat_type": "clean",
"last_scanned": "2026-07-07T06:12:04.000Z",
"open_alerts": 0,
"badge_visible": true,
"badge_live": true
}
]
}
Endpoints
GET /api/v1 - detectie: uw plan en tier.
GET /api/v1/domains - al uw domeinen met huidige score, dreigingstype en badgestatus.
GET /api/v1/domains/{domain} - één domein.
GET /api/v1/domains/{domain}/history - scan-scoreverloop (geschiedenisdiepte volgt uw plan).
GET /api/v1/alerts - nieuwste dreigingsmeldingen voor alle domeinen, open en opgelost.
POST /api/v1/domains (Business) - voeg een domein toe; monitoring start direct. Body: {"domain": "example.com"}.
DELETE /api/v1/domains/{domain} (Business) - verwijder een domein; scans stoppen, de badge wordt niet meer getoond.
Probeer het
Plak een API-sleutel uit uw dashboard (Instellingen → API-sleutels) en roep hier direct elk lees-endpoint aan. De sleutel gaat alleen mee in dit ene verzoek, naar deze site - er wordt niets opgeslagen, en het verzoek telt mee voor uw ratelimiet zoals elk ander verzoek.
Conventies: elk antwoord is JSON met success en ofwel data of fout.code + foutmelding (401 onjuiste sleutel, 403 abonnement/niveau, 404 niet van jou, 429 snelheidsbeperkt). Limiet is 60 verzoeken/minuut per sleutel - bekijk de X-RateLimit-Remaining en Retry-After headers.
Push + pull: combineer de API met webhookmeldingen - webhooks laten je weten zodra iets verandert, de API geeft je de volledige huidige status wanneer je erom vraagt. Er is bewust geen endpoint voor het scannen van willekeurige domeinen van derden.
Nog hulp nodig?
We kijken graag naar je specifieke configuratie. Stuur ons je websiteadres en wat je ziet.