Korzen
Bot Protection

Widgets em outros sites

Um widget que seus clientes incorporam nos próprios sites, como um formulário de reserva, uma loja ou uma bilheteria: a tag no frame, o token que sua página envia e quais domínios contam.

Um widget roda em sites que não são seus: seus clientes incorporam seu formulário de reserva, loja ou bilheteria nas páginas deles. O Bot Protection funciona ali também, com três pontos a acertar: onde a tag roda, como o token chega ao seu servidor e quais domínios o seu plano conta.

Num frame no seu próprio domínio (recomendado)

Sirva o widget do seu domínio e deixe seus clientes o incorporarem num <iframe>. Coloque a tag na página dentro do frame, como em qualquer página sua. O Bot Protection então vê o seu domínio, seja qual for o site que o incorpora: um domínio no seu plano, comprovado como qualquer outro (sua página inicial tem a tag, ou você o adiciona na página Set-up).

Num frame, os cookies da sua página são de terceiros. Chrome, Edge e Firefox os guardam separados para cada site que incorpora você, e o Safari não guarda nenhum. Então não dependa do cookie _kz ali: antes da ação protegida, pegue o token da tag e envie você mesmo.

const token = await window.korzen?.ready();
await fetch("/api/book", {
  method: "POST",
  headers: { "content-type": "application/json", "x-korzen-token": token || "" },
  body: JSON.stringify(order),
});

No seu servidor, passe esse header para a chamada como o token, acima do cookie:

const input = fromNodeRequest(req, { ip: (_get, r) => r.ip, path: "/api/book" });
input.token = req.get("x-korzen-token") || input.token;
const decision = await korzen.decide(input);

Todo SDK e a chamada do seu servidor aceitam um campo token do mesmo jeito. O armazenamento de um frame também fica separado por site, então o mesmo visitante em dois sites dos seus clientes são dois dispositivos para o Bot Protection. Isso é um sinal ausente, nunca evidência de bot.

A página de desafio e os frames

A página de desafio devolve o visitante com um cookie que um frame não guarda. Dentro de um frame, responda challenge com um passo seu (seu CAPTCHA, uma verificação por email ou telefone) e deixe require_token fora das ações do frame. Veja monitor mode e block mode para o que cada ação significa.

Um script na página do seu cliente

Um widget que é um script que seus clientes colam, sem frame, roda na página deles. Então a tag roda no domínio deles, cada domínio dos seus clientes conta no seu plano, e as páginas deles precisam ter a tag com a sua site key. Seu script chama seu servidor de outra origem, onde cookies não são enviados: envie o token no header como acima e permita x-korzen-token na sua resposta de CORS.

Os hostnames dos seus clientes

Um hostname que seu cliente aponta para você (tickets.lojadele.com, um CNAME) é o domínio dele: conta como um dos domínios do seu plano, como o script acima. Os planos protegem até cinco; com mais hostnames dos seus clientes, sirva o widget num frame no seu domínio, ou escreva para nós.