Introduzione

Questa guida fornisce una panoramica e degli esempi su come proteggersi dai tentativi di bypass del DNS. L'implementazione dell'intestazione x-ch-no-bypass non è obbligatoria per nessuna delle integrazioni di CrowdHandler, tuttavia, se così fosse, fornirebbe un ulteriore livello di verifica dell'utente ed è quindi consigliata.

Per quali tipi di integrazione è rilevante questo articolo?

Akamai

Cloudflare

Cloudfront

DNS

Cosa si intende per tentativi di bypass del DNS?

L'integrazione di CrowdHandler sul CDN scelto rende difficile l'aggiramento dei controlli di CrowdHandler, tuttavia gli utenti più smaliziati che sono in grado di rintracciare le informazioni di rete associate alla vostra infrastruttura web possono essere in grado di instradare il loro traffico intorno all'endpoint del CDN, aggirando tutte le protezioni che esso offre, compresa l'integrazione di CrowdHandler.

Come funziona

Una volta configurata, l'integrazione CrowdHandler allegherà un'intestazione denominata "x-ch-no-bypass" a tutte le richieste inoltrate all'applicazione. Il valore dell'intestazione sarà il token no-bypass sicuro. Con una quantità minima di codice, è possibile configurare l'applicazione web per verificare che le richieste siano inviate con questa intestazione e questo token, assicurando che solo gli utenti controllati da CrowdHandler siano ammessi all'applicazione.

Dove posso trovare il mio gettone?

Se si utilizza l'integrazione DNS, il token si trova nella console di amministrazione di CrowdHandler nella schermata delle impostazioni del dominio dell'applicazione web da proteggere. Il valore del token sarà memorizzato nel campo No-Bypass Token. 

Per le altre integrazioni CDN (akamai, cloudflare e cloudfront), le rispettive guide all'installazione vi indicheranno come impostare il token no-bypass. 

Esempi di integrazione

La convalida della presenza e del valore dell'intestazione di richiesta x-ch-no-bypass può essere facilmente eseguita nella maggior parte dei linguaggi di programmazione e dei server web. Di seguito sono riportati alcuni esempi di implementazione per vari linguaggi e server web popolari. 

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)

da django.http import HttpResponseForbidden
da django.http import HttpResponse

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