Se prémunir contre les tentatives de contournement du DNS à l'aide du jeton sécurisé « x-ch-no-bypass ».

Ce guide présente une vue d'ensemble et des exemples illustrant comment vous pouvez vous protéger contre les tentatives de contournement du DNS. La mise en place de l'en-tête « x-ch-no-bypass » n'est obligatoire pour aucune des intégrations de CrowdHandler ; toutefois, cela apporte une couche supplémentaire de vérification de l'utilisateur et est donc recommandé.

À quels types d'intégration cet article s'applique-t-il ?

Akamai

Cloudflare

Cloudfront

DNS

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

L'intégration de CrowdHandler à votre CDN de choix rend difficile le contournement des contrôles de CrowdHandler ; toutefois, des utilisateurs avertis, capables de repérer les informations réseau associées à votre infrastructure web, pourraient être en mesure de contourner votre point de terminaison CDN, échappant ainsi à toutes les mesures de protection qu'il offre, y compris votre intégration de CrowdHandler.

Comment ça

Une fois configurée, votre intégration CrowdHandler ajoutera un en-tête nommé « x-ch-no-bypass » à toutes les requêtes transmises à votre application. La valeur de cet en-tête correspondra à votre jeton sécurisé « no-bypass ». Avec un minimum de code, vous pouvez configurer votre application web pour qu’elle vérifie que les requêtes sont envoyées avec cet en-tête et ce jeton, garantissant ainsi que seuls les utilisateurs ayant été validé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 se trouve dans la console d'administration de CrowdHandler, sur l'écran des paramètres de domaine de l'application web que vous souhaitez protéger. La valeur du jeton sera stockée dans le champ « No-Bypass Token ».

Pour les autres intégrations de CDN (Akamai, Cloudflare et CloudFront), les guides d'installation correspondants vous expliqueront comment configurer votre jeton « no-bypass ».

d'intégration#

La vérification 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 sur la plupart des serveurs web. Vous trouverez ci-dessous quelques exemples d'implémentation 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!")