Contenido verificado asociado a este RA
Fundamentos de la Ejecución de Código: Cliente vs. Servidor
Esta unidad explora las diferencias fundamentales entre la ejecución de código en el navegador (cliente) y en el servidor web, analizando sus roles, capacidades y limitaciones. Se establecen las bases para comprender por qué y cuándo se utiliza cada entorno en el desarrollo web dinámico.
Tecnologías de Servidor para Páginas Dinámicas y Guiones Embebidos
Esta unidad introduce las tecnologías clave del lado del servidor que permiten incrustar código en el lenguaje de marcas para generar contenido web dinámico. Se exploran ejemplos como PHP, ASP.NET y Node.js con motores de plantillas, destacando su funcionamiento y aplicación.
Interacción con el Usuario: Advertencias, Confirmaciones y Verificación de Formularios en el Servidor
Esta unidad muestra cómo el servidor genera páginas dinámicas que interactúan con el usuario mediante mensajes de advertencia y peticiones explícitas de confirmación antes de ejecutar acciones críticas, y cómo complementa esa interacción con una verificación robusta de los datos de formularios, indispensable para garantizar la integridad y la seguridad de la aplicación web.
Modificación Dinámica de Contenido y Estructura con Tecnologías de Servidor
Esta unidad aborda cómo las tecnologías del servidor permiten modificar dinámicamente el contenido y la estructura de las páginas web antes de ser enviadas al cliente. Se exploran técnicas para generar HTML condicional, bucles y la inclusión de componentes reutilizables, fundamentales para aplicaciones web complejas.
Conceptos clave
Cliente WebServidor WebJavaScriptHTMLCSSLógica de NegocioBase de DatosPeticiones HTTPDOMPHPASP.NETNode.jsMotores de PlantillasGuiones EmbebidosIntérpreteHTML DinámicoAdvertencia vs. ConfirmaciónFlujo de confirmación (GET→confirmar→POST→ejecutar)
Errores que conviene evitar
- Asumir que la validación en cliente es suficiente: Causa: Confianza excesiva en la seguridad del lado cliente. Corrección: Siempre replicar validaciones críticas en el servidor, ya que el código cliente puede ser fácilmente manipulado.
- Intentar acceder a recursos del servidor desde el cliente directamente: Causa: Desconocimiento de las barreras de seguridad y la arquitectura web. Corrección: Todas las interacciones con recursos del servidor deben canalizarse a través de APIs o endpoints definidos en el servidor.
- Confundir el código PHP/ASP.NET/Node.js con JavaScript de cliente: Causa: No entender que el código del servidor se ejecuta *antes* de que la página llegue al navegador. Corrección: Recordar que el servidor genera el HTML, y el cliente solo ve el HTML final, no el código fuente del servidor.
- No escapar la salida de datos dinámicos: Causa: Inyección de código malicioso (XSS). Corrección: Siempre usar funciones de escape (ej. `htmlspecialchars()` en PHP, `@Html.Raw` con precaución en ASP.NET, `ejs.escape` en EJS) al mostrar datos provenientes del usuario o de la base de datos en el HTML.
- Confiar solo en la validación JavaScript del cliente: Causa: desconocimiento de que el cliente puede ser manipulado o tener JavaScript deshabilitado. Corrección: implementar siempre una validación robusta y completa en el servidor, independientemente de la validación en el cliente.
- No escapar la salida de datos de usuario en el HTML: Causa: riesgo de XSS al insertar directamente el contenido enviado por el usuario. Corrección: usar siempre funciones de escape (htmlspecialchars en PHP, equivalentes en otras tecnologías de servidor) para cualquier dato mostrado que provenga del usuario o de la base de datos.
- Ejecutar acciones críticas directamente sin pedir confirmación explícita al servidor: Causa: confiar en un simple confirm() de JavaScript, que puede evitarse fácilmente. Corrección: implementar un flujo servidor de dos pasos (mostrar confirmación → ejecutar solo tras recibir confirmación en una petición POST separada).
- Acceder a variables superglobales ($_POST, $_GET) sin comprobar su existencia: Causa: asumir que el campo siempre estará presente en la petición. Corrección: comprobar con isset() o array_key_exists() antes de usar el valor, asignando un valor por defecto si no existe.