Cabeceras de seguridad
Compruebe qué cabeceras de seguridad envía realmente un sitio, como Content-Security-Policy, Strict-Transport-Security y X-Frame-Options, y vea de cada una si falta, es débil o está bien configurada. Útil antes de un lanzamiento o una auditoría. Paga por uso, sin suscripción.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
Un sitio puede tener un servidor blindado y aun así dejar la puerta abierta si sus cabeceras de respuesta nunca le indican al navegador qué bloquear.
Por qué un servidor seguro sigue necesitando estas instrucciones
Muchos equipos dan por hecho que con un certificado instalado el trabajo de seguridad está terminado, pero el navegador sigue necesitando instrucciones: si la página puede mostrarse dentro de un marco en otro sitio, en qué fuentes de scripts confiar y si debe exigir una conexión cifrada en cada visita futura. Esas instrucciones viven en un puñado de cabeceras de seguridad, y un sitio perfectamente cifrado puede dejarlas todas sin poner. Casi todas responden a ataques reales: X-Frame-Options existe porque el clickjacking esconde un botón invisible sobre una página legítima, y Content-Security-Policy existe porque los scripts inyectados seguían colándose pese a los filtros de entrada.
Cómo leer el informe
Para cada cabecera, como Content-Security-Policy, Strict-Transport-Security, X-Frame-Options, X-Content-Type-Options o Referrer-Policy, el informe muestra si está presente, qué valor tiene y si ese valor protege de verdad o solo está como formalidad. Que falte una cabecera no es automáticamente un hallazgo grave: una página informativa sin datos de usuarios tiene un riesgo muy distinto al de un formulario de acceso. Tome el resultado como el punto de partida de un juicio sobre lo que hace el sitio y corrija primero las páginas que recogen o muestran datos de usuarios. Se usa antes de un lanzamiento, en los sitios de clientes tras una migración de servidor y antes de confiar en el sitio de un socio.
Por qué existen precisamente estas cabeceras
La mayoría se agregaron a la plataforma web en respuesta a clases de ataque reales y bien documentadas: X-Frame-Options existe porque el clickjacking engaña al usuario para que haga clic en algo invisible superpuesto a una página legítima, y Content-Security-Policy existe porque la inyección de scripts seguía colándose aunque la entrada de datos se saneara. No son decorativas; cada una cierra una puerta que, en algún momento, quedó abierta en la práctica antes de que los navegadores acordaran una cabecera para cerrarla.
Qué puede hacer con ella
Revisión de blindaje antes del lanzamiento
Ejecute una comprobación antes de que un sitio salga a producción para confirmar que las cabeceras que marcaría una auditoría de seguridad ya están en su lugar.
Auditorías de clientes y portafolios
Escanee una lista de dominios de clientes con regularidad para detectar una cabecera que se perdió en una migración de servidor o un cambio de proveedor.
Filtros de seguridad en integración continua
Haga que un pipeline de despliegue falle automáticamente si una cabecera obligatoria como Strict-Transport-Security desaparece de una compilación.
Debida diligencia de proveedores y terceros
Revise las cabeceras del sitio público de un socio como parte de una evaluación de seguridad ligera antes de integrarse con él.
Preguntas frecuentes
¿Una cabecera faltante significa que el sitio es inseguro?
No necesariamente. El impacto depende de lo que haga el sitio; una cabecera ausente en una página estática representa menos riesgo que el mismo hueco en una página que maneja datos de usuario o autenticación.
¿Existe un plan gratuito?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿En qué se diferencia de revisar cabeceras a mano en el navegador?
Automatiza la comprobación, la ejecuta de forma asíncrona a escala sobre cualquier cantidad de URLs, y entrega un resultado estructurado y firmado en vez de una lectura manual de texto crudo en las herramientas de desarrollador.
¿Se cobra una comprobación fallida?
No. Las tareas fallidas se reintentan automáticamente hasta tres veces sin costo; solo se cobran las comprobaciones completadas con éxito.
¿Qué cabeceras revisa la herramienta?
Las que importan para proteger un sitio: Content-Security-Policy, Strict-Transport-Security, X-Frame-Options, X-Content-Type-Options, Referrer-Policy y otras cercanas. De cada una le dice si está presente, qué valor tiene y si ese valor protege de verdad o solo cumple el trámite.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/web/security-headers \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com"}'const res = await fetch("https://api.kit.forhosting.com/web/security-headers", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://example.com"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/security-headers",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://example.com"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/security-headers", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://example.com"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://example.com"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/security-headers", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"url": "https://example.com"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.security_headers",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
timeout_sec | 30 |
max_crawl_pages | 25 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Esta API de cabeceras de seguridad obtiene una URL, lee las cabeceras de protección que realmente están presentes, y reporta qué está bien configurado, qué es débil y qué falta por completo, para que blindar un sitio sea una lista de verificación y no una suposición.
La diferencia entre tener HTTPS y estar realmente blindado
Esas instrucciones viven por completo en un puñado de cabeceras de respuesta, y es perfectamente posible tener un sitio con cifrado impecable que las deje todas sin configurar. Muchos equipos asumen que con el certificado instalado el trabajo de seguridad está terminado, pero el navegador todavía necesita instrucciones: si debe permitir la página dentro de un iframe, qué orígenes de script confiar, si debe forzar HTTPS en cada visita futura.
Qué examina la comprobación
Llame a POST /web/security-headers con una URL y la tarea revisa la respuesta buscando las cabeceras relevantes para el blindaje —Content-Security-Policy, Strict-Transport-Security, X-Frame-Options, X-Content-Type-Options, Referrer-Policy y sus parientes cercanos— y devuelve, para cada una, si está presente, cuál es su valor y si ese valor protege de verdad o solo está ahí de forma testimonial.
Cómo encaja en un flujo de seguridad
Como los resultados llegan por webhook firmado, la comprobación se integra sin fricción en un pipeline de integración continua como filtro antes de un release, en un escaneo periódico de cumplimiento sobre un portafolio de dominios, o en una auditoría puntual antes de tomar un cliente nuevo —en cualquier lugar donde de otra forma alguien tendría que abrir las herramientas de desarrollador y revisar cabeceras de memoria, lo cual inevitablemente termina en olvidar una.
Cómo leer un resultado con honestidad
Una cabecera ausente no es automáticamente un hallazgo crítico —una página estática de marketing sin entrada de usuario tiene un perfil de riesgo muy distinto al de un formulario de acceso— así que conviene tratar el reporte como punto de partida para un criterio propio según lo que el sitio realmente hace, no como un sello de aprobado o reprobado aplicado a ciegas.
Preguntas técnicas
¿Qué cabeceras de seguridad revisa esta API?
Examina las cabeceras más relevantes para el blindaje del lado del navegador, incluyendo Content-Security-Policy, Strict-Transport-Security, X-Frame-Options, X-Content-Type-Options y Referrer-Policy, reportando presencia y valor de cada una.
¿Cómo se entregan los resultados?
Mediante un webhook firmado cuando la tarea termina, recomendado para automatización, o un enlace firmado válido por 24 horas.
¿Cuánto cuesta una solicitud?
$0.002 por solicitud, precio fijo sin importar cuántas cabeceras se evalúen.
¿Puedo auditar muchos dominios en bloque?
Sí, envíe una tarea por cada URL y dé seguimiento por task_id; el modelo asíncrono está pensado para escanear portafolios completos de dominios con regularidad.