Integrazzjoni ma' Python
Python jista' jiġi protett kompletament — mingħajr pakkett u mingħajr dipendenzi. Il-verifika hija sejħa HTTPS waħda biss.
Aħna ma nippubblikawx SDK għal Python. Dan jgħid xi ħaġa dwar id-distribuzzjoni tagħna, mhux dwar il-protezzjoni tiegħek: dak li jagħmlu l-SDKs, is-sejħa hawn taħt tagħmlu bil-librerija standard.
1. Daħħal il-widget
L-iskript ikejjel l-imġiba fil-brawżer u jqiegħed qasam moħbi f'kull formola. Żidu darba fl-intestatura tal-paġni.
<!-- 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. Ivverifika fuq is-server
Meta tintbagħat, aqra l-qasam moħbi u staqsina qabel taċċetta s-sottomissjoni. Mingħajr dan il-pass jiddeċiedi biss il-brawżer — u bot mingħajr JavaScript jgħaddi minn ħdejh.
# 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 u FastAPI
Il-funzjoni ta' hawn fuq ma tiddependix mill-qafas. It-tliet postijiet tas-sejħa jinsabu bħala kummenti fl-aħħar tas-silta: Flask jaqra d-dizzjunarju tal-formola, Django id-data POST, FastAPI parametru tal-formola.
Meta ma nkunux disponibbli
Is-silta tħalli lill-viżitatur jgħaddi. Klijent miċħud bi żball jiswa aktar minn bot li jgħaddi. Jekk trid bil-kontra, irritorna falz fil-fergħa tal-iżball — imbagħad ħsara tiswielek sottomissjonijiet.
Aġenti tal-IA
Irrapporta l-osservazzjonijiet tal-aġenti bl-istess mudell lejn il-punt tat-telemetrija: POST wieħed u l-istess intestatura.
L-infurzar lokali tar-regoli mhuwiex possibbli minn Python — tiġi vverifikata firma Ed25519 fuq pakkett ta' regoli. Qiegħed l-enforcer quddiem l-applikazzjoni bħala sidecar jew uża l-Cloudflare Worker.