Introducción

Esta guía proporciona una visión general y ejemplos de cómo puede protegerse contra los intentos de omisión de DNS. Implementar el encabezado x-ch-no-bypass no es obligatorio para ninguna de las integraciones de CrowdHandler, sin embargo, hacerlo proporcionará una capa adicional de verificación del usuario y, por lo tanto, se recomienda.

¿Para qué tipos de integración es relevante este artículo?

Akamai

Cloudflare

Cloudfront

DNS

¿Qué entendemos por intentos de eludir el DNS?

La integración de CrowdHandler en la CDN de su elección dificulta la elusión de las comprobaciones de CrowdHandler; sin embargo, los usuarios expertos que sean capaces de rastrear la información de red asociada a su infraestructura web pueden ser capaces de dirigir su tráfico alrededor del punto final de su CDN, eludiendo toda la protección que ofrece, incluida su integración de CrowdHandler.

Cómo funciona

Cuando esté configurada, su integración CrowdHandler adjuntará un encabezado llamado "x-ch-no-bypass" a todas las solicitudes reenviadas a su aplicación. El valor de la cabecera será su token seguro no-bypass. Con una cantidad mínima de código requerido, puede configurar su aplicación web para comprobar que las solicitudes se envían con este encabezado y token, asegurando que sólo los usuarios que han sido verificados por CrowdHandler son permitidos en su aplicación.

¿Dónde puedo encontrar mi ficha?

Si utiliza la integración DNS, el token se encuentra en la consola de administración de CrowdHandler, en la pantalla de configuración del dominio de la aplicación web que va a proteger. El valor del token se almacenará en el campo No-Bypass Token. 

Para otras integraciones CDN (akamai, cloudflare y cloudfront), las guías de instalación respectivas le indicarán cómo configurar su token de no bypass. 

Ejemplos de integración

La validación de la presencia y el valor de la cabecera de petición x-ch-no-bypass puede realizarse fácilmente en la mayoría de lenguajes de programación y servidores web. A continuación se muestran algunos ejemplos de implementación para varios lenguajes y servidores web populares. 

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("¡Hola mundo!")