Python integracija
Python galima visiškai apsaugoti — be paketo ir be priklausomybių. Patikra yra vienas HTTPS kvietimas.
Mes neišleidžiame Python SDK. Tai pasakoja apie mūsų platinimą, o ne apie jūsų apsaugą: ką daro SDK, žemiau esantis kvietimas atlieka su standartine biblioteka.
1. Valdiklio įterpimas
Skriptas matuoja elgseną naršyklėje ir į kiekvieną formą įdeda paslėptą lauką. Įterpkite jį vieną kartą puslapių antraštėje.
<!-- Add to <head> with SRI for security -->
(function () {
var KEY = "YOUR_API_KEY";
var SITE = location.hostname;
var V = "2025.09.1";
var s = document.createElement('script');
s.src = "https://api.silentshield.io/client.js?k=" + encodeURIComponent(KEY)
+ "&v=" + encodeURIComponent(V)
+ "&site=" + encodeURIComponent(SITE);
s.async = true;
s.crossOrigin = "anonymous";
document.head.appendChild(s);
})();2. Patikra serveryje
Siunčiant perskaitykite paslėptą lauką ir paklauskite mūsų, prieš priimdami pateikimą. Be šio žingsnio sprendžia tik naršyklė — o robotas be JavaScript praeina pro šalį.
# No package required — the check is one HTTPS POST.
# Standard library only: nothing to install, nothing to keep updated.
import json
import os
import urllib.error
import urllib.request
VERIFY_URL = "https://api.silentshield.io/api/v1/captcha/verify-nonce"
API_KEY = os.environ["SILENTSHIELD_KEY"] # never hard-code it
def is_human(nonce: str) -> bool:
"""Ask SilentShield about one submission.
The hidden field `behavior_nonce` is injected by client.js;
read it from the posted form and hand it over unchanged.
"""
if not nonce:
return False
request = urllib.request.Request(
VERIFY_URL,
data=json.dumps({"nonce": nonce}).encode(),
headers={
"Content-Type": "application/json",
"X-Api-Key": API_KEY,
# Tells us which integration is in use, exactly like the SDKs do.
"X-SS-SDK": "python-inline/1",
},
method="POST",
)
try:
with urllib.request.urlopen(request, timeout=5) as response:
data = json.loads(response.read())
except (urllib.error.URLError, TimeoutError, ValueError):
# We are unreachable. Let the visitor through: a real customer turned
# away costs more than a bot let in. Flip this to False only if you
# would rather lose submissions than accept one unchecked.
return True
return (
data.get("ok") is True
and data.get("verdict") == "human"
and data.get("confidence", 0) >= 0.7
)
# --- Flask ---------------------------------------------------------------
# @app.post("/contact")
# def contact():
# if not is_human(request.form.get("behavior_nonce", "")):
# abort(400, "Please submit the form again.")
# ...
# --- Django --------------------------------------------------------------
# def contact(request):
# if not is_human(request.POST.get("behavior_nonce", "")):
# return HttpResponseBadRequest("Please submit the form again.")
# ...
# --- FastAPI -------------------------------------------------------------
# @app.post("/contact")
# async def contact(behavior_nonce: str = Form("")):
# if not is_human(behavior_nonce):
# raise HTTPException(status_code=400, detail="Please submit the form again.")
# ...Flask, Django ir FastAPI
Aukščiau esanti funkcija nepriklauso nuo karkaso. Trys kvietimo vietos yra komentaruose ištraukos pabaigoje: Flask skaito formos žodyną, Django POST duomenis, FastAPI formos parametrą.
Kai esame nepasiekiami
Ištrauka lankytoją praleidžia. Nepagrįstai atmestas klientas kainuoja daugiau nei praleistas robotas. Jei norite priešingai, klaidos šakoje grąžinkite netiesa — tada sutrikimas kainuos jums pateikimus.
DI agentai
Apie agentų pastebėjimus praneškite tuo pačiu būdu telemetrijos galiniam taškui: vienas POST ir ta pati antraštė.
Vietinio taisyklių vykdymo iš Python nėra — tikrinamas Ed25519 parašas taisyklių pakete. Įdėkite enforcer prieš programą kaip sidecar arba naudokite Cloudflare Worker.