Documentation · Audit Dataiads
Autoriser Dataiads à auditer derrière votre WAF.
Si votre origin est protégé par un WAF (Cloudflare, Akamai, Datadome, Imperva), notre IP cloud sortante peut être interceptée par défaut - et le score Reach & read devient non concluant. Plutôt que de nous allowlister par IP, nous signons chaque audit avec un token HMAC court envoyé dans l’en-tête X-Dataiads-Audit.
§ 0 · Comportement par défaut
Cascade automatique anti-WAF
Même sans aucune configuration de votre côté, l’audit Dataiads ne se laisse pas bloquer : si notre fetch direct est intercepté par un WAF, on escalade automatiquement vers Bright Data Web Unlocker (proxy résidentiel + rendu JS). Le score est alors basé sur ce que voit un agent IA réel - proxy résidentiel = environnement réseau le plus proche d’un crawler GPT/Gemini.
Configurer la règle WAF ci-dessous reste recommandé : vous économisez la latence et le coût Bright Data (chaque audit non escaladé est plus rapide et moins cher), et vos audits restent maîtrisés côté origin.
1 · Direct
Fetch HTTPS depuis nos serveurs avec header
X-Dataiads-Audit. Quand votre règle WAF est en place : 99 % des audits s’arrêtent ici.2 · Bright Data
Si un challenge WAF est détecté → escalade vers Web Unlocker (résidentiel + JS render). Les critères concernés portent un badge
via BDdans le rapport.3 · Indéterminé
Si BD échoue aussi (cas rare), les critères Reach & read concernés sortent du calcul - le sous-score reste honnête plutôt qu’injustement zéroté.
§ I · Modèle de confiance
Présence du header vs validation HMAC
Niveau 1 · Présence du header
Configuration la plus simple : votre règle WAF passe en bypass dès que le header est présent et commence par v1.audit. ou v1.domain. Combinez avec un rate limit dédié (ex. 10 req/min) pour limiter le risque qu’un acteur tiers spoofe le header. Suffit pour 95 % des cas.
Niveau 2 · Validation HMAC complète
Pour une garantie cryptographique, déployez un Worker (Cloudflare, Akamai EdgeWorker) qui valide la signature HMAC du token avec une clé partagée. Snippet ci-dessous. Recommandé sur les origins très exposés (services bancaires, retail premium…).
§ II · Cloudflare
Règle Cloudflare Custom WAF
# Cloudflare Dashboard → Security → WAF → Custom rules → Create rule # Description : Bypass Dataiads audit # Field : Custom header # Header name : X-Dataiads-Audit # Operator : starts with # Value : v1.audit. (ou v1.domain. pour les tokens de test) # Action : Skip → All remaining custom rules → Continue # # Optionnel : combiner avec un rate limit dédié pour limiter l'exposition # (X req/min par IP source quand le header est présent).
Validation HMAC - Cloudflare Worker
Demandez la clé HMAC à Dataiads ( hello@dataiads.io ). À déployer sur la route auditée.
// Cloudflare Worker (validation HMAC complète, optionnel mais robuste)
// Déployez ce Worker sur la route protégée puis configurez la règle WAF
// "Skip remaining" sur le header X-Dataiads-Audit-Verified=1.
const SECRET = "<même valeur que DATAIADS_AUDIT_SECRET côté Dataiads>"
async function hmacBase64Url(secret, body) {
const key = await crypto.subtle.importKey(
"raw",
new TextEncoder().encode(secret),
{ name: "HMAC", hash: "SHA-256" },
false,
["sign"]
)
const sig = await crypto.subtle.sign("HMAC", key, new TextEncoder().encode(body))
return btoa(String.fromCharCode(...new Uint8Array(sig)))
.replace(/=+$/, "").replace(/\+/g, "-").replace(/\//g, "_")
}
export default {
async fetch(request) {
const token = request.headers.get("X-Dataiads-Audit")
if (!token) return fetch(request)
const parts = token.split(".")
if (parts.length !== 5) return fetch(request)
const [version, scope, ref, expiresAt, hmac] = parts
if (Date.now() > Number(expiresAt)) return fetch(request)
const expected = await hmacBase64Url(SECRET, `${version}.${scope}.${ref}.${expiresAt}`)
if (expected !== hmac) return fetch(request)
const url = new URL(request.url)
const headers = new Headers(request.headers)
headers.set("X-Dataiads-Audit-Verified", "1")
return fetch(new Request(url, { method: request.method, headers, body: request.body }))
}
}§ III · Akamai
Match Request Header → bypass Bot Manager
// Akamai Property Manager → Match : Request Header // Header name : X-Dataiads-Audit // Match value : starts with "v1.audit." // Then → Bot Manager Bypass (ou allowlist Kona Site Defender). // // Ou via EdgeWorker (équivalent Cloudflare Worker) pour valider la // signature HMAC : voir les snippets Akamai EdgeKV / SubtleCrypto.
§ IV · Datadome
Custom integration rule
// Datadome ne supporte pas les règles header en self-service standard. // Demande une "custom integration rule" à Datadome : // "Bypass Datadome challenge when header X-Dataiads-Audit starts with v1.audit." // Datadome support : custom-rules@datadome.co // // Workaround : whitelist par IP côté Datadome reste possible mais discouraged // (cf. doc principale Dataiads sur les risques de l'allowlist IP cloud).
§ V · Tester votre configuration
Vérifier que le header arrive jusqu’à nous
Une fois votre règle WAF déployée, demandez à Dataiads un token long-lived (24h) pour votre domaine, puis appelez l’endpoint de diagnostic. Pas de header reçu = la règle n’est pas active comme attendu.
curl -s "https://app.dataiads.io/api/audit-bypass/verify" \
-H "X-Dataiads-Audit: <token reçu de Dataiads>"
# Réponse attendue si la règle WAF marche bien :
# { "valid": true, "scope": "domain", "expiresAt": "...", "expiresInSeconds": ... }
# Si "valid": false avec reason="missing_token" → le header n'arrive pas
# jusqu'à nous (votre WAF l'a probablement supprimé en route).
# Si reason="bad_signature" → vous testez avec un token périmé ou contrefait.
# Si reason="expired" → demandez à Dataiads un nouveau token.Besoin d’un token de test ?
Écrivez à hello@dataiads.io avec votre domaine, on revient sous quelques heures avec un token signé valable 24h.