Dacă ai un formular de înregistrare, un login sau un formular de contact, cineva încearcă deja să abuzeze de ele: conturi false create în serie, adrese de email temporare, scripturi care trimit mii de cereri, spam prin formularul de contact.
Hazeloft Security stă în fața cererilor tale și, pentru fiecare, dă un răspuns simplu: las-o să treacă sau blocheaz-o. Îl pui o dată în proiect, iar de acolo încolo tot ce reglezi — ce protecții sunt pornite, ce blochează, ce doar observă, ce praguri au — se face din dashboard, live, fără să mai atingi codul și fără să pui aplicația din nou pe server.
Ce te protejează
Toate se pornesc, se opresc și se reglează din dashboard.
| Protecție | La ce folosește |
|---|---|
| Detectare boți | Oprește scripturile și scraperele, dar lasă Google și Bing să-ți indexeze site-ul |
| Validare email | Respinge adresele temporare (cele „de unică folosință") și, dacă vrei, providerii gratuiți |
| Verificare de domeniu | Verifică în DNS că domeniul din adresă chiar există și poate primi mail |
| Validare nume | Prinde numele generate aleator, semnul clasic al conturilor făcute în serie |
| Limită per adresă | O persoană nu-și poate face zeci de conturi cu variații ale aceluiași email |
| Blocare atacuri | Oprește tiparele clasice de atac asupra aplicației tale |
| Date sensibile | Refuză cererile care conțin numere de card, emailuri sau telefoane, dacă nu vrei să le primești |
| Challenge | Cere browserului o mică dovadă că e un om, nu un script |
| Rate limiting | Limitează câte cereri poate face cineva într-un interval |
| Liste de IP-uri | Blochezi o adresă din dashboard, sau o scutești complet de verificări |
| Protecția înregistrării | Toate cele de sus, aplicate deodată pe pagina de sign-up |
| EmailEncrypt | Ascunde adresele de email din paginile tale, ca să nu le poată recolta boții |
| Alerte | Te anunță pe email sau webhook când protecția se apropie de plafon, când se oprește sau când crește brusc numărul de blocări |
Planuri și limite
Hazeloft Security e inclus în planurile Pro și Ultra.
| Plan | Verificări incluse pe lună |
|---|---|
| Free, Go | — (produsul nu e disponibil) |
| Pro | 250.000 |
| Ultra | 2.000.000 |
O „verificare" e o protecție rulată pe o cerere. Dacă pe ruta ta sunt active trei protecții, o cerere consumă trei verificări — exact ce vezi defalcat pe pagina Usage din dashboard. Plafonul e per cheie API și se resetează la începutul fiecărei luni.
Ai nevoie de o cheie
Ca să folosești Hazeloft Security îți trebuie o cheie API, pe care o creezi din Dashboard → Integrations → Hazeloft Security → API Keys. Cheia leagă protecția de contul tău: tot ce vezi în dashboard — setările, logurile de blocări, graficele de consum — e legat de ea.
Instalare
npm i @hazeloft/securityPune cheia în variabilele de mediu — atât:
HAZELOFT_SECURITY_API_KEY=hzx-sec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxPentru challenge (calculul din browser) mai instalezi și partea de client:
npm i @hazeloft/security-clientCum arată, în trei pași
- Creezi cheia din dashboard și o pui în
.env. - Adaugi două fișiere de cod — cele de mai jos. E singura dată când atingi codul.
- Reglezi din dashboard: ce protecții pornești, ce blochează și ce doar observă.
Partea de cod e mai scurtă decât pare, și nu se mai schimbă după aceea. Dacă are cine să te ajute cu ea, e treabă de cincisprezece minute; restul produsului se folosește din interfață.
Motorul, o singură dată
Nu configurezi nimic aici — consoleRules aduce automat toate protecțiile cu setările tale
din dashboard:
import {
HazeloftSecurity,
consoleRules,
createConfigClient,
createEventReporter,
} from "@hazeloft/security";
export const security = new HazeloftSecurity({
apiKey: process.env.HAZELOFT_SECURITY_API_KEY,
configClient: createConfigClient(), // aduce setările din dashboard
eventReporter: createEventReporter(), // trimite logurile și consumul înapoi
rules: consoleRules, // toate capabilitățile, configurate din dashboard
});Pe fiecare rută pe care o protejezi
import { security } from "@/security";
export async function POST(request: Request) {
const { email } = await request.clone().json();
const decision = await security.protect(request, { email });
if (decision.isDenied()) {
return Response.json({ error: "Cerere blocată" }, { status: 403 });
}
// ... restul logicii tale, doar pentru cererile permise
}Gata. De aici încolo totul se reglează din dashboard, fără să mai atingi codul și fără să repui aplicația pe server.
Ce primești înapoi
security.protect(request) îți dă o Decision, cu care decizi ce faci:
| Metodă | Ce spune |
|---|---|
decision.isDenied() | cererea trebuie blocată |
decision.isAllowed() | cererea e în regulă |
decision.reason | ce capabilitate a decis (bot, email, rate_limit, …) |
decision.retryAfter | peste câte secunde poate reîncerca (la rate limit) |
Poți răspunde tu, ca în exemplul de sus, sau lași adaptorul să răspundă automat — vezi mai jos.
Adaptor de rută (Next / Hono / Bun / Deno)
Dacă nu vrei să tratezi tu răspunsul, withHazeloftSecurity învelește handler-ul și răspunde
singur la cererile blocate (429 la rate limit, 400 la email, 403 în rest):
import { withHazeloftSecurity } from "@hazeloft/security";
import { security } from "@/security";
export const POST = withHazeloftSecurity(
security,
async (request) => Response.json({ ok: true }),
{ props: async (request) => ({ email: (await request.clone().json()).email }) },
);Mai departe
| Pagină | Ce găsești |
|---|---|
| Capabilități | fiecare protecție în detaliu și ce reglezi la ea |
| Protecția înregistrării | apărarea completă a paginii de sign-up |
| Dashboard | ce vezi, ce reglezi, cum treci de la „doar observ" la „blochează", alertele |
| EmailEncrypt | ascunde adresele de email de boți |
| Best practices | cum lansezi în siguranță și cum depanezi |