Pré-visualize e instale o seu badge
Experimente os estilos abaixo para ver exatamente o que os seus visitantes vão ver. Quando estiver pronto, o seu código personalizado está à sua espera no painel - sem precisar de saber programar.
Pré-visualize o seu estilo
Escolha abaixo um estilo, tamanho e cor para ver o seu badge em direto. Isto é apenas uma pré-visualização - não precisa de iniciar sessão.
Copie o seu código do painel
Inicie sessão e o PCrisk fornece-lhe um snippet pronto com o estilo escolhido incluído - funciona em todos os domínios da sua conta.
Cole, guarde e publique
Adicione-o ao seu site. Assim que o seu domínio passar na análise diária, o badge aparece automaticamente.
Sem cookies, sem rastreio, ~7 KB. O selo carrega depois da sua página (por isso nunca a torna mais lenta), não armazena nada sobre os seus visitantes e não define cookies.
O selo só aparece quando a sua verificação mais recente está limpa. Se acabou de se registar, aguarde um pouco até a primeira verificação terminar. Um espaço em branco significa apenas “ainda não confirmado como limpo” - não que o código esteja com erro.
Guias por plataforma
Duas formas de adicionar o selo: instale o nosso plugin ou cole o snippet do seu painel. Escolha a sua plataforma abaixo — em ambos os casos demora poucos minutos.
WordPress
Mais fácil — instale o plugin gratuito, sem código:
- No painel do WordPress, vá a Plugins → Adicionar novo.
- Procure por PCrisk Trust Badge.
- Clique em Instalar agora, depois Ativar.
- Abra Trust Badge no menu de administração, ligue o seu site e depois escolha um estilo e onde o selo aparece. A pré-visualização ao vivo mostra exatamente o que os visitantes vão ver.
Usa WooCommerce? O plugin deteta-o automaticamente e adiciona posições na loja — página da loja, páginas de produto, carrinho e checkout — além da posição global do seu site. Nada extra para instalar.
Não consegue instalar plugins? Cole antes o snippet do seu painel numa área de código do rodapé — por exemplo, o gratuito “WPCode” ou Aspeto → Editor de ficheiros do tema (faça uma cópia de segurança primeiro).
ShopifyBrevemente
A nossa app Shopify está a caminho. Está em desenvolvimento — instalação com um clique, sem código no tema, com posições nas páginas de produto, carrinho e checkout. Até lá, pode adicionar o selo com o snippet abaixo.
Entretanto:
- No admin do Shopify, vá a Loja online → Temas.
- No seu tema atual, clique em ⋯ -> Editar código.
- Abra layout/theme.liquid e cole o snippet do seu painel mesmo antes do fecho de </body> .
- Guardar. O selo aparece em todas as páginas da sua loja.
Wix
- Vá a Definições → Código personalizado no painel do seu site.
- Clique em + Adicionar código personalizado, cole o snippet e defina-o para carregar em Todas as páginas, colocado no Body - fim.
- Aplicar e publicar.
Squarespace
- Vá a Definições → Avançadas → Injeção de código.
- Cole o snippet na caixa Rodapé .
- Guardar. (A Injeção de código requer um plano Business ou superior.)
Webflow, Framer e HTML personalizado
Webflow: Definições do projeto → Código personalizado → cole na caixa Código do rodapé → publicar.
Framer: Definições do site → Geral → Código personalizado → Fim da tag <body>.
Sites com código manual: cole o snippet imediatamente antes de </body> no seu ficheiro de modelo ou layout.
Personalize o seu selo
As suas escolhas ficam como data-* atributos na colocação do snippet <div> - o criador do painel define todos ao gerar o seu código. Para alterar o estilo depois, escolha um novo visual lá e cole o snippet atualizado sobre o antigo. Eis o que cada atributo controla.
| Atributo | Valores | Função |
|---|---|---|
data-style | shield, ribbon, minimal, bubble | A forma e disposição gerais do badge. |
data-size | small, medium, large | Escala geral do badge. |
data-theme | light, dark, auto | Combine com o fundo do seu site. auto segue o modo claro ou escuro do seu site. |
data-position | bottom-right, bottom-left, top-right, top-left | Fixa o badge nesse canto do ecrã - funciona com qualquer estilo. Se o omitir, o badge é mostrado em linha no seu <div>. |
Quer colocá-lo num ponto exato, como a meio do checkout? O <div> no seu snippet É o local do badge - coloque-o onde o badge deve aparecer (até reserva o espaço do badge para que o layout nunca mude). Quer badges em vários locais? Cole mais divs; a tag script só precisa de aparecer uma vez. Badges flutuantes - qualquer estilo com data-position - ignoram onde o seu div está: fixam-se no canto que escolher.
O badge não aparece?
Siga estes passos por ordem - os dois primeiros resolvem a grande maioria dos casos.
Aguarde um momento - e confirme que a sua análise mais recente está limpa
O badge só é mostrado quando a sua análise diária mais recente está limpa. Isto é intencional - mantém o significado do badge intacto, para nunca ser mostrado num site comprometido.
Se acabou de o instalar:
- Verifique o seu painel PCrisk - aparece “Selo ativo” ao lado do seu domínio?
- Se uma análise ainda estiver pendente, aguarde que termine e depois atualize a página.
- Se o seu site foi assinalado, resolva o problema; o badge volta automaticamente após a próxima análise limpa.
O seu site tem uma Content Security Policy (avançado)
A boa notícia: 9 em cada 10 sites podem ignorar isto. Uma Content Security Policy (CSP) é uma definição de segurança avançada que tem de ativar deliberadamente. Se nunca ouviu falar disso, quase de certeza que não tem uma - e este não é o seu problema.
Pense numa CSP como uma lista de convidados do seu site - só deixa entrar serviços que aprovou. Se tiver uma, basta adicionar o PCrisk à lista com estas entradas:
script-src https://scanner.pcrisk.com
connect-src https://scanner.pcrisk.com
style-src 'unsafe-inline'
O style-src a linha só é necessária se a sua política restringir estilos (por ex., definir style-src ou apenas default-src): o selo aplica o seu design através de um elemento <style> , por isso, sem ele, o selo carrega mas fica invisível.
Acessos rápidos:
• plugin de segurança WordPress (Wordfence, Really Simple Security, etc.): abra as definições e adicione estas entradas à secção Content Security Policy.
• Cloudflare: o seu site → Security → Settings → a sua regra CSP → adicione estas entradas.
• Wix / Squarespace / Shopify padrão: nada a fazer - estes não usam políticas personalizadas, por isso o selo funciona logo.
Não tem a certeza, ou ainda não aparece? Copie esta mensagem e envie-a a quem gere o seu site (o seu programador ou suporte de alojamento) - saberão exatamente o que fazer:
script-src https://scanner.pcrisk.com e connect-src https://scanner.pcrisk.com. Se a nossa política bloquear estilos inline, permita também 'unsafe-inline' em style-src. Obrigado!Um bloqueador de anúncios ou extensão de privacidade está a ocultá-lo
Alguns bloqueadores de anúncios ou extensões de privacidade mais agressivos (ou navegadores como o Brave com proteção rigorosa) podem bloquear scripts de terceiros. Para verificar, abra o seu site numa janela privada/anónima com as extensões desativadas, ou pause temporariamente o bloqueador.
Isto afeta apenas a pequena parte dos visitantes que usam essas ferramentas - a maioria verá o selo normalmente. O selo em si não define cookies nem rastreia nada, o que torna isto raro.
Verifique se o selo está num domínio adicionado
O selo verifica o domínio exato onde é carregado. Se adicionou example.com mas o snippet está a correr num subdomínio diferente (como shop.example.com), um URL de staging, ou localhost, não encontrará correspondência.
Certifique-se de que a página que mostra o selo está num domínio que adicionou no seu painel. Precisa dele em vários subdomínios? Adicione cada um à sua conta.
Selo inline: adicionou o contentor?
Emblemas inline (qualquer estilo sem data-position) são renderizados na posição <div class="pcrisk-badge"> do seu snippet - confirme que essa div foi para a página junto com a tag script (alguns construtores de páginas removem divs mas mantêm scripts). Sem div e sem data-* atributos na tag script, o motor não tem onde renderizar.
Como os visitantes verificam
Um emblema que qualquer pessoa pode falsificar não gera confiança. O nosso é verificável de forma independente - é isso que faz valer a pena mostrá-lo.
O clique abre um relatório em direto
Todos os emblemas são clicáveis. Os visitantes chegam ao seu relatório público em scanner.pcrisk.com - alojado por nós, não por si - mostrando a análise mais recente e a pontuação de confiança.
Independente por definição
Como o relatório está num domínio que os visitantes não controlam, o resultado é fiável - tal como o cadeado do navegador é independente do site por trás dele.
Dica: a ligação do relatório pode ser partilhada por si só. Coloque-a em faturas, páginas de parceiros ou emails de suporte sempre que precisar de provar o estado atual de segurança do seu site.
O que acontece se for detetada uma ameaça
Nunca irá mostrar um selo “verificado” num site comprometido.
Alertamo-lo rapidamente
No momento em que uma análise assinala um problema, recebe um email detalhado - gravidade, o que foi encontrado, onde e como corrigir.
O emblema oculta-se automaticamente
O seu emblema é removido automaticamente até o problema ser resolvido - e volta no momento em que uma análise de seguimento confirma que o seu site está limpo novamente.
Alertas Slack & webhook
Receba os mesmos alertas que enviamos por email - ameaça encontrada, tudo limpo, a análise não pôde ser concluída - enviados para o Slack ou para o seu próprio endpoint, nos mesmos momentos. Configure ambos no painel em Definições → Integrações de alertas.
Slack
No Slack, crie um Incoming Webhook para o canal pretendido (Slack: Apps → Incoming Webhooks → Add to a channel), cole o hooks.slack.com URL no seu painel e prima Enviar teste do Slack. É toda a configuração - sem código.
Webhooks
Nós enviamos JSON por POST para o seu endpoint HTTPS. Quatro tipos de evento:
• alert.opened - uma verificação sinalizou o site (pontuação abaixo de 70); o selo foi pausado.
• alert.resolved - uma verificação posterior voltou limpa; o selo foi restaurado.
• scan.failed - a verificação diária não pôde ser concluída (site inacessível); enviada uma vez por indisponibilidade.
• teste - o Enviar teste de webhook botão.
{
"event": "alert.opened",
"domain": "example.com",
"trust_score": 55,
"threat_type": "suspicious",
"severity": "medium",
"occurred_at": "2026-07-07T08:28:36.874Z"
}
Cada pedido inclui três cabeçalhos: Content-Type: application/json, X-PCrisk-Event (o tipo de evento), e X-PCrisk-Signature - sha256= seguido do HMAC SHA-256 em hex do corpo bruto do pedido, com a signing secret mostrada no seu painel. Verifique-a antes de confiar na entrega.
Semântica de entrega: esperamos até 5 segundos por uma resposta e contamos qualquer 2xx como aceite; uma entrega falhada é repetida uma vez, ~15 segundos depois, e depois descartada. Trate os webhooks como notificações, não como registo - o seu painel é o estado de referência.
Verifique com o corpo bruto. A assinatura cobre os bytes exatos que enviamos. Se a sua framework analisar o JSON antes de poder ler o corpo bruto (por ex., um express.json()), voltar a serializar o objeto analisado não vai reproduzir os mesmos bytes - capture o corpo bruto, como em cada exemplo abaixo.
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
Vai mudar o endpoint? Guarde o novo URL no painel e envie um teste - a signing secret mantém-se a mesma para a sua conta. Os alertas são por incidente (um alert.opened por episódio abaixo de 70, não um por verificação), por isso o seu canal não será inundado por um site que continue sinalizado.
REST API
Traga os seus domínios, pontuações, histórico de verificações e alertas para os seus próprios painéis, relatórios e monitorização. Acesso de leitura no Pro; o Business adiciona gestão de domínios. A API só expõe seus domínios monitorizados.
Autenticação
Crie uma chave no seu painel em Definições → Chaves API (é mostrada uma vez - guardamos apenas um hash) e envie-a como token Bearer. As chaves herdam as permissões do seu plano atual, e revogá-las no painel desativa-as de imediato.
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 - descoberta: o seu plano e nível.
GET /api/v1/domains - todos os seus domínios com pontuação atual, tipo de ameaça e estado do badge.
GET /api/v1/domains/{domain} - um domínio.
GET /api/v1/domains/{domain}/history - histórico da pontuação de análise (a profundidade segue o seu plano).
GET /api/v1/alerts - alertas de ameaça mais recentes em todos os domínios, abertos e resolvidos.
POST /api/v1/domains (Business) - adicione um domínio; a monitorização começa de imediato. Corpo: {"domain": "example.com"}.
DELETE /api/v1/domains/{domain} (Business) - remova um domínio; as análises param, o badge deixa de ser apresentado.
Experimente
Cole uma chave API do seu painel (Definições → Chaves API) e chame aqui qualquer endpoint de leitura. A chave vai apenas neste pedido, para este site - nada é guardado, e o pedido conta para o seu limite de taxa como qualquer outro.
Convenções: cada resposta é JSON com success e data ou código.erro + mensagem.erro (401 chave inválida, 403 plano/nível, 404 não é sua, 429 limite atingido). O limite é 60 pedidos/minuto por chave - veja os cabeçalhos X-RateLimit-Remaining e Retry-After .
Push + pull: combine a API com alertas webhook - os webhooks avisam-no no momento em que algo muda, a API dá-lhe o estado atual completo sempre que pedir. Não existe deliberadamente nenhum endpoint para analisar domínios arbitrários de terceiros.
Ainda precisa de ajuda?
Teremos todo o gosto em analisar a sua configuração específica. Envie-nos o endereço do seu website e o que está a ver.