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.

HTMLhtml
<!-- 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į.

Pythonpython
# 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.