Introduction

Ce guide fournit une vue d'ensemble et des exemples de la façon dont vous pouvez vous protéger contre les tentatives de contournement du DNS. L'implémentation de l'en-tête x-ch-no-bypass n'est pas nécessaire pour les intégrations de CrowdHandler, mais elle fournit une couche supplémentaire de vérification de l'utilisateur et est donc recommandée.

Quels sont les types d'intégration concernés par cet article ?

Akamai

Cloudflare

Cloudfront

DNS

Qu'entend-on par tentatives de contournement du DNS ?

L'intégration de CrowdHandler sur le CDN de votre choix rend difficile le contournement des contrôles de CrowdHandler, mais les utilisateurs avisés qui sont en mesure de trouver des informations sur le réseau associé à votre infrastructure web peuvent être en mesure d'acheminer leur trafic autour de votre point de terminaison CDN, en contournant toutes les protections qu'il offre, y compris votre intégration de CrowdHandler.

Comment cela fonctionne-t-il ?

Une fois configurée, votre intégration CrowdHandler attachera un en-tête nommé "x-ch-no-bypass" à toutes les demandes transmises à votre application. La valeur de l'en-tête sera votre jeton sécurisé de non contournement. Avec un minimum de code, vous pouvez configurer votre application web pour vérifier que les requêtes sont envoyées avec cet en-tête et ce jeton, garantissant que seuls les utilisateurs qui ont été vérifiés par CrowdHandler sont autorisés à accéder à votre application.

Où puis-je trouver mon jeton ?

Si vous utilisez l'intégration DNS, le jeton peut être trouvé dans la console d'administration CrowdHandler sur l'écran des paramètres du domaine de l'application web que vous protégez. La valeur du jeton sera stockée dans le champ No-Bypass Token. 

Pour les autres intégrations CDN (akamai, cloudflare et cloudfront), les guides d'installation respectifs vous indiqueront comment configurer votre jeton de non contournement. 

Exemples d'intégration

La validation de la présence et de la valeur de l'en-tête de requête x-ch-no-bypass peut être facilement effectuée dans la plupart des langages de programmation et des serveurs web. Vous trouverez ci-dessous quelques exemples de mise en œuvre pour divers langages et serveurs web courants. 

Apache

RewriteEngine On

# block if request header x-ch-no-bypass value isn't matched
RewriteCond %{HTTP:x-ch-no-bypass} !^(YOURTOKENVALUE)$
RewriteRule ^ - [F]

Nginx

location / {

    if ($http_x_ch_no_bypass != "YOURTOKENVALUE") {
        return 403;
    }

    proxy_pass http://app:3000/;
}

Express.js

app.get('/', (req, res) => {
    if (req.header('x-ch-no-bypass') !== "YOURTOKENVALUE") {
        res.status(403).send("Sorry! You can't see that.")
    }
    res.sendFile(__dirname + "/views/index.html");
})

PHP

function getRequestHeaders() {
    $headers = array();
    foreach($_SERVER as $key => $value) {
        if (substr($key, 0, 5) <> 'HTTP_') {
            continue;
        }

        $header = str_replace(' ', '-', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))));
        $headers[$header] = $value;
    }
    return $headers;
}

$headers = getRequestHeaders();

if($headers['X-Ch-No-Bypass'] != "YOURTOKENVALUE") {
    header("HTTP/1.1 403 Forbidden" );
    exit;
}

Python (Django)

from django.http import HttpResponseForbidden
from django.http import HttpResponse

def index(request) :
    chBypassKey = request.META.get('HTTP_X_CH_NO_BYPASS')
    if (chBypassKey) != "YOURTOKENVALUE" :
        return HttpResponseForbidden()
    else :
        return HttpResponse("Hello world !")