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

Introduction

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é.

Which integration types is this article relevant for?

Akamai

Cloudflare

CloudFront

DNS

What do we mean by DNS bypass attempts?

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.

How it works

When configured, your CrowdHandler integration will attach a header named "x-ch-no-bypass" to all requests forwarded to your application. The value of the header will be your secure no-bypass token. With a minimal amount of code required, you can configure your web application to check that requests are sent with this header and token, ensuring that only users that have been checked by CrowdHandler are allowed onto your application.

Where can I find my token?

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 ».

For other CDN integrations (Akamai, Cloudflare, and CloudFront), the respective installation guides will instruct you on how to set up your no-bypass token.

Integration Examples

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!")