Prévisualisez & installez votre badge
Essayez les styles ci-dessous pour voir exactement ce que verront vos visiteurs. Quand vous êtes prêt, votre code personnalisé vous attend dans votre tableau de bord - aucune compétence en code requise.
Prévisualisez votre style
Choisissez un style, une taille et une couleur ci-dessous pour voir votre badge en direct. Ceci est juste un aperçu - aucune connexion requise.
Copiez votre code depuis le tableau de bord
Connectez-vous et PCrisk vous fournit un extrait prêt à l’emploi avec le style choisi intégré - il fonctionne sur tous les domaines de votre compte.
Collez, enregistrez & publiez
Ajoutez-le à votre site. Une fois que votre domaine a passé son analyse quotidienne, le badge apparaît automatiquement.
Sans cookies, sans suivi, ~7 KB. Le badge se charge après votre page (il ne la ralentit donc jamais), ne stocke rien sur vos visiteurs et ne définit aucun cookie.
Le badge n’apparaît que lorsque votre dernière analyse est propre. Si vous venez de vous inscrire, laissez un peu de temps à votre première analyse pour se terminer. Un espace vide signifie simplement “pas encore confirmé comme propre”, pas que le code est cassé.
Guides par plateforme
Deux façons d’ajouter le badge : installez notre plugin ou collez l’extrait depuis votre tableau de bord. Choisissez votre plateforme ci-dessous : dans les deux cas, cela prend quelques minutes.
WordPress
Le plus simple : installez l’extension gratuite, sans code :
- Dans votre tableau de bord WordPress, allez à Extensions → Ajouter.
- Rechercher PCrisk Trust Badge.
- Cliquez sur Installer maintenant, puis Activer.
- Ouvrez Trust Badge dans le menu d’administration, connectez votre site, puis choisissez un style et l’emplacement du badge. L’aperçu en direct montre exactement ce que verront les visiteurs.
Vous utilisez WooCommerce ? L’extension le détecte automatiquement et ajoute des emplacements boutique — page boutique, pages produit, panier et paiement — en plus de l’emplacement global du site. Rien d’autre à installer.
Impossible d’installer des extensions ? Collez plutôt l’extrait de code depuis votre tableau de bord dans une zone de code du pied de page — par exemple la version gratuite “WPCode” extension, ou Apparence → Éditeur de fichiers du thème (faites d’abord une sauvegarde).
ShopifyBientôt
Notre app Shopify arrive bientôt. Elle est en cours de développement : installation en un clic, sans code de thème, avec des emplacements pour les pages produit, panier et paiement. En attendant, vous pouvez ajouter le badge avec l’extrait ci-dessous.
En attendant :
- Dans l’admin Shopify, allez à Boutique en ligne → Thèmes.
- Sur votre thème actuel, cliquez sur ⋯ -> Modifier le code.
- Ouvrez layout/theme.liquid et collez l’extrait depuis votre tableau de bord juste avant la balise fermante </body> .
- Enregistrer. Le badge apparaît sur chaque page de votre boutique.
Wix
- Allez dans Paramètres → Code personnalisé dans le tableau de bord de votre site.
- Cliquez sur + Ajouter du code personnalisé, collez l’extrait et réglez-le pour qu’il se charge sur Toutes les pages, placé dans Body - fin.
- Appliquer & publier.
Squarespace
- Allez dans Paramètres → Avancé → Injection de code.
- Collez l’extrait dans la zone Pied de page .
- Enregistrez. (L’injection de code nécessite un forfait Business ou supérieur.)
Webflow, Framer et HTML personnalisé
Webflow : Paramètres du projet → Code personnalisé → collez dans Code du pied de page → publier.
Framer : Paramètres du site → Général → Code personnalisé → Fin de la balise <body>.
Sites codés à la main : collez l’extrait juste avant </body> dans votre fichier de modèle ou de mise en page.
Personnalisez votre badge
Vos choix sont enregistrés comme data-* attributs sur l’emplacement de l’extrait <div> - le concepteur du tableau de bord les définit tous lors de la génération de votre code. Pour modifier le style plus tard, choisissez-y un nouveau look et collez l’extrait mis à jour sur l’ancien. Voici ce que contrôle chaque attribut.
| Attribut | Valeurs | Rôle |
|---|---|---|
data-style | shield, ribbon, minimal, bubble | Forme et disposition générales du badge. |
data-size | small, medium, large | Taille générale du badge. |
data-theme | light, dark, auto | Adaptez-le au fond de votre site. auto suit le mode clair ou sombre de votre site. |
data-position | bottom-right, bottom-left, top-right, top-left | Fixe le badge à ce coin de l’écran - fonctionne avec n’importe quel style. Si vous l’omettez, le badge s’affiche en ligne dans son <div>. |
Vous le voulez à un endroit précis, comme au milieu du paiement ? Le <div> dans votre extrait EST l’emplacement du badge - placez-le là où le badge doit apparaître (il réserve même l’espace du badge pour que votre mise en page ne bouge jamais). Vous voulez des badges à plusieurs endroits ? Collez plus de div ; la balise script n’a besoin d’apparaître qu’une seule fois. Les badges flottants - tout style avec data-position - ignorent l’emplacement de leur div : ils se fixent au coin choisi.
Le badge ne s’affiche pas ?
Suivez ces étapes dans l’ordre - les deux premières résolvent la grande majorité des cas.
Patientez un instant - et vérifiez que votre dernier scan est propre
Le badge ne s’affiche que si votre dernier scan quotidien est propre. C’est intentionnel - cela préserve la signification du badge, afin qu’il ne soit jamais affiché sur un site compromis.
Si vous venez de l’installer :
- Vérifiez votre tableau de bord PCrisk - est-ce que « Badge actif » apparaît à côté de votre domaine ?
- Si un scan est encore en attente, attendez qu’il se termine, puis actualisez votre page.
- Si votre site a été signalé, corrigez le problème ; le badge reviendra automatiquement après le prochain scan propre.
Votre site a une Content Security Policy (avancé)
Bonne nouvelle : 9 sites sur 10 peuvent ignorer ceci. Une Content Security Policy (CSP) est un paramètre de sécurité avancé que vous devez activer volontairement. Si vous n’en avez jamais entendu parler, vous n’en avez presque certainement pas - et ce n’est pas votre problème.
Voyez une CSP comme une liste d’invités pour votre site web - elle n’autorise que les services que vous avez approuvés. Si vous en avez une, ajoutez simplement PCrisk à la liste avec ces entrées :
script-src https://scanner.pcrisk.com
connect-src https://scanner.pcrisk.com
style-src 'unsafe-inline'
Le style-src cette ligne n’est nécessaire que si votre politique limite les styles (par ex. si elle définit style-src ou seulement default-src) : le badge applique son apparence via un <style> inline, donc sans lui le badge se charge mais reste invisible.
Accès rapides :
• Extension de sécurité WordPress (Wordfence, Really Simple Security, etc.) : ouvrez ses paramètres et ajoutez ces entrées dans la section Content Security Policy.
• Cloudflare : votre site → Security → Settings → votre règle CSP → ajoutez ces entrées.
• Wix / Squarespace / Shopify standard : rien à faire - ils n’utilisent pas de politiques personnalisées, donc le badge fonctionne simplement.
Pas sûr, ou il n’apparaît toujours pas ? Copiez ce message et envoyez-le à la personne qui gère votre site (votre développeur ou le support de l’hébergement) - elle saura exactement quoi faire :
script-src https://scanner.pcrisk.com et connect-src https://scanner.pcrisk.com. Si notre politique bloque les styles inline, autorisez aussi 'unsafe-inline' en style-src. Merci !Un bloqueur de pub ou une extension de confidentialité le masque
Certains bloqueurs de pub agressifs ou extensions de confidentialité (ou des navigateurs comme Brave avec une protection stricte) peuvent bloquer les scripts tiers. Pour vérifier, ouvrez votre site dans une fenêtre privée/incognito avec les extensions désactivées, ou mettez temporairement votre bloqueur en pause.
Cela ne concerne qu’une petite part des visiteurs utilisant ce type d’outils - la plupart verront le badge normalement. Le badge lui-même ne définit aucun cookie et ne suit rien, ce qui rend ce cas rare.
Vérifiez que le badge est sur un domaine ajouté
Le badge vérifie le domaine exact sur lequel il est chargé. Si vous avez ajouté example.com mais que le snippet s’exécute sur un sous-domaine différent (comme shop.example.com), une URL de préproduction, ou localhost, il ne trouvera pas de correspondance.
Assurez-vous que la page affichant le badge est sur un domaine ajouté dans votre tableau de bord. Besoin de l’afficher sur plusieurs sous-domaines ? Ajoutez-les chacun à votre compte.
Badge inline : avez-vous ajouté le conteneur ?
Les badges intégrés (tout style sans data-position) s’affichent à l’emplacement <div class="pcrisk-badge"> de votre extrait - assurez-vous que cette div est bien présente sur la page avec la balise script (certains constructeurs de pages suppriment les div mais gardent les scripts). Sans div et sans data-* attributs sur la balise script, le moteur n’a nulle part où afficher le rendu.
Comment vos visiteurs le vérifient
Un badge que n’importe qui peut falsifier n’inspire aucune confiance. Le nôtre est vérifiable indépendamment - c’est ce qui le rend utile à afficher.
Le clic ouvre un rapport en direct
Chaque badge est cliquable. Les visiteurs arrivent sur votre rapport public à scanner.pcrisk.com - hébergé par nous, pas par vous - affichant le dernier scan et le score de confiance.
Indépendant par conception
Comme le rapport se trouve sur un domaine que les visiteurs ne contrôlent pas, le résultat est fiable - de la même façon que le cadenas du navigateur est indépendant du site qu’il protège.
Astuce : le lien du rapport peut être partagé tel quel. Ajoutez-le à des factures, pages partenaires ou e-mails d’assistance chaque fois que vous devez prouver l’état de sécurité actuel de votre site.
Que se passe-t-il si une menace est détectée
Vous n’afficherez jamais un sceau “vérifié” sur un site compromis.
Nous vous alertons vite
Dès qu’un scan signale un problème, vous recevez un e-mail détaillé - gravité, élément détecté, emplacement et correctif.
Le badge se masque automatiquement
Votre badge est retiré automatiquement jusqu’à la résolution du problème - et revient dès qu’un scan de suivi confirme que votre site est de nouveau propre.
Alertes Slack & webhook
Recevez les mêmes alertes que par e-mail - menace détectée, tout est OK, scan impossible à terminer - envoyées vers Slack ou votre propre endpoint, aux mêmes moments. Configurez les deux dans votre tableau de bord sous Paramètres → Intégrations d’alertes.
Slack
Dans Slack, créez un Incoming Webhook pour le canal souhaité (Slack : Apps → Incoming Webhooks → Ajouter à un canal), collez l’ hooks.slack.com URL dans votre tableau de bord, puis appuyez sur Envoyer un test Slack. C’est toute la configuration - aucun code nécessaire.
Webhooks
Nous envoyons du JSON par POST à votre endpoint HTTPS. Quatre types d’événements :
• alert.opened - une analyse a signalé le site (score inférieur à 70) ; le badge est suspendu.
• alert.resolved - une analyse ultérieure est revenue propre ; le badge est rétabli.
• scan.failed - l’analyse quotidienne n’a pas pu se terminer (site inaccessible) ; envoyé une fois par panne.
• test - le Envoyer un test webhook bouton.
{
"event": "alert.opened",
"domain": "example.com",
"trust_score": 55,
"threat_type": "suspicious",
"severity": "medium",
"occurred_at": "2026-07-07T08:28:36.874Z"
}
Chaque requête comporte trois en-têtes : Content-Type: application/json, X-PCrisk-Event (type d’événement), et X-PCrisk-Signature - sha256= suivi du HMAC SHA-256 hexadécimal du corps brut de la requête, signé avec le secret de signature affiché dans votre tableau de bord. Vérifiez-le avant de faire confiance à une livraison.
Sémantique de livraison : nous attendons jusqu’à 5 secondes une réponse et comptons tout 2xx comme accepté ; une livraison échouée est retentée une fois, ~15 secondes plus tard, puis abandonnée. Traitez les webhooks comme des notifications, pas comme un registre - votre tableau de bord fait foi.
Vérifiez par rapport au corps brut. La signature couvre les octets exacts que nous envoyons. Si votre framework analyse le JSON avant que vous puissiez lire le corps brut (p. ex. un express.json()), re-sérialiser l’objet analysé ne va pas reproduire les mêmes octets - capturez le corps brut, comme dans chaque exemple ci-dessous.
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
Vous changez d’endpoint ? Enregistrez la nouvelle URL dans le tableau de bord et envoyez un test - le secret de signature reste le même pour votre compte. Les alertes sont par incident (une alert.opened par épisode sous 70, pas une par analyse), donc votre canal ne sera pas inondé par un site qui reste signalé.
API REST
Intégrez vos domaines, scores, historique d’analyse et alertes dans vos propres tableaux de bord, rapports et outils de surveillance. Accès en lecture sur Pro ; le forfait Business ajoute la gestion des domaines. L’API n’expose jamais que les vôtres domaines surveillés.
Authentification
Créez une clé dans votre tableau de bord sous Paramètres → Clés API (elle n’est affichée qu’une fois - nous ne stockons qu’un hash) et envoyez-la comme jeton Bearer. Les clés héritent de leurs autorisations de votre offre actuelle, et leur révocation dans le tableau de bord les désactive immédiatement.
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 - découverte : votre offre et niveau.
GET /api/v1/domains - tous vos domaines avec score actuel, type de menace et état du badge.
GET /api/v1/domains/{domain} - un domaine.
GET /api/v1/domains/{domain}/history - historique du score d’analyse (profondeur selon votre offre).
GET /api/v1/alerts - dernières alertes de menace sur tous les domaines, ouvertes et résolues.
POST /api/v1/domains (Business) - ajoute un domaine ; la surveillance démarre immédiatement. Corps : {"domain": "example.com"}.
DELETE /api/v1/domains/{domain} (Business) - supprime un domaine ; les analyses s’arrêtent, le badge ne s’affiche plus.
Essayer
Collez une clé API depuis votre tableau de bord (Paramètres → Clés API) et appelez ici n’importe quel endpoint en lecture. La clé n’est utilisée que pour cette requête, vers ce site - rien n’est stocké, et la requête compte dans votre limite de débit comme les autres.
Conventions : chaque réponse est du JSON avec success et soit data ou code.erreur + message.erreur (401 clé invalide, 403 plan/niveau, 404 pas à vous, 429 limite atteinte). La limite est de 60 requêtes/minute par clé - surveillez les en-têtes X-RateLimit-Remaining et Retry-After .
Push + pull : associez l’API à des alertes webhook - les webhooks vous informent dès qu’un changement survient, l’API vous donne l’état actuel complet à chaque demande. Il n’existe volontairement aucun endpoint pour analyser des domaines tiers arbitraires.
Besoin d’aide ?
Nous pouvons examiner votre configuration. Envoyez-nous l’adresse de votre site web et ce que vous constatez.