Protección contra los intentos de eludir el DNS mediante el token seguro «x-ch-no-bypass».
Introducción
Esta guía explica cómo proteger tu origen frente a los intentos de eludir el DNS. La implementación de la x-ch-no-bypass El encabezado no es obligatorio para ninguna integración de CrowdHandler, pero añade un nivel de verificación en tu origen, por lo que se recomienda su uso.
¿Para qué tipos de integración es relevante este artículo?
¿A qué nos referimos con «intentos de eludir el DNS»?
La integración de CrowdHandler en tu CDN dificulta eludir los controles de CrowdHandler. Sin embargo, un usuario decidido que consiga localizar información de red sobre tu infraestructura podría enviar el tráfico por fuera del punto final de tu CDN, eludiendo así toda la protección que ofrece, incluida tu integración con CrowdHandler.
Cómo funciona
Una vez configurada, la integración de CrowdHandler añade un encabezado denominado x-ch-no-bypass a cada solicitud reenviada a tu aplicación. Su valor es tu token de no omisión. Con unas pocas líneas de código, tu aplicación comprueba que las solicitudes incluyan el encabezado con el valor esperado y rechaza aquellas que no lo hagan. Solo las solicitudes que hayan pasado por CrowdHandler llegan a tu aplicación.
Appcelerator (DNS) con Cloudflare o Imperva como capa de protección
Si tu DNS apunta a Cloudflare o Imperva y ese servicio redirige el tráfico a CrowdHandler, configura el dominio Tipo de configuración a Cloudflare o Imperva en el panel de control de CrowdHandler. En ese modo, CrowdHandler no añade su propio x-ch-no-bypass encabezado. En su lugar, el encabezado que configures en Cloudflare o Imperva se transmite a tu origen sin modificaciones.
La validación de ese valor en tu origen demuestra que la solicitud ha pasado tanto por tu servicio de origen como por CrowdHandler. Una solicitud que llega directamente a CrowdHandler, sin pasar por Cloudflare ni Imperva, llega a tu origen sin encabezado y es rechazada.
Si el «Tipo de configuración» se deja en «DNS directo», CrowdHandler añade su propio token y sobrescribe cualquier encabezado con el mismo nombre que reciba.
¿Dónde puedo encontrar mi token?
Appcelerator (DNS): abre la página de configuración del dominio en el panel de control de CrowdHandler y despliega la sección «Opciones». El token se encuentra en el campo «No-Bypass Token ».
Si el tipo de configuración es Cloudflare o Imperva, en ese campo aparecerá «Reenviado desde Cloudflare» o «Reenviado desde Imperva». En ese caso, no hay ningún token de CrowdHandler. El valor que hay que validar es el que hayas configurado en el servidor de origen.

Otras integraciones con CDN (Akamai, Cloudflare, CloudFront): en la guía de instalación correspondiente se explica dónde se configura el token. El valor lo eliges tú.
Ejemplos de integración
Comprobar si existe el x-ch-no-bypass El encabezado de la solicitud es sencillo en la mayoría de los lenguajes y servidores web. Sustituye VALOR DE TU TOKEN con tu token.
Apache
RewriteEngine On
# Block if the x-ch-no-bypass request header does not match
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") {
return 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):
ch_bypass_key = request.META.get('HTTP_X_CH_NO_BYPASS')
if ch_bypass_key != "YOURTOKENVALUE":
return HttpResponseForbidden()
return HttpResponse("¡Hola, mundo!")
Lo que protege y lo que no protege el encabezado
El x-ch-no-bypass La comprobación se realiza en tu origen, por lo que solo se aplica a las solicitudes que llegan hasta él. De ello se desprenden dos cosas.
La sala de espera se aplica siempre. CrowdHandler comprueba todas las solicitudes en el perímetro antes de que ocurra nada más, incluidas las solicitudes de contenido almacenado en caché. Un visitante no puede saltarse la cola buscando una copia almacenada en caché.
El contenido almacenado en caché omite la comprobación del origen. Si se configura una ruta para su almacenamiento en caché, la primera solicitud la recupera de tu origen, donde se valida el encabezado, y las solicitudes posteriores se sirven desde la caché de la CDN sin volver a tu origen. Por lo tanto, una solicitud que se haya saltado el CDN podría recibir una copia ya almacenada en caché de esa ruta. Así es como funciona cualquier caché de CDN, no es algo específico de CrowdHandler. Si una página debe validarse en cada solicitud, desactiva el almacenamiento en caché para ella. En Appcelerator, esto se configura en la columna «Política de caché» dentro de «Reglas de comportamiento avanzadas»; los dominios nuevos no almacenan nada en caché de forma predeterminada.