Detalle del libro
Ver Índice
Prefacio
1. La seguridad en el mundo de las aplicaciones Web
Información sobre seguridad en una cáscara de nuez
Flirteando con soluciones formales
Introducción a la gestión de riesgos
Iluminación a través de la taxonomía
Hacia enfoques más prácticos
Una breve historia de la Web
Cuentos de la Edad de Piedra: 1945 a 1994
Las primeras guerras de los navegadores: 1995 a 1999
El período aburrido: 2000 a 2003
La Web 2.0 y la segunda guerra de los navegadores: 2004 y más allá
La evolución de una amenaza
El usuario como fallo de seguridad
La Nube o las alegrías de la vida en comunidad
Divergencia de visiones
Interacciones entre navegadores cruzados: el fallo de la sinergia
El desglose de la división cliente-servidor
Parte I. Anatomía de la Web
2. Todo empieza con una URL
La estructura de un localizador uniforme de recursos
Nombre de esquema
Indicador de una URL jerárquica
Credenciales para acceder al recurso
Dirección del servidor
Puerto del servidor
Ruta jerárquica de archivo
Cadena de consulta
Identificador de fragmento
Ponerlo todo junto de nuevo
Caracteres reservados y codificación porcentual
Manejar texto ASCII en idiomas no derivados del inglés
Esquemas URL comunes y sus funciones
Protocolos de búsqueda de documentos soportados en un navegador
Protocolos reclamados por aplicaciones y complementos de terceros
Seudo-protocolos no encapsulados
Seudo-protocolos encapsulados
Nota final sobre la detección de esquemas
Resolución de URL relativas
3. Protocolo de transferencia de hipertexto
Sintaxis básica del tráfico HTTP
Las consecuencias del soporte de HTTP/0.9
Peculiaridades del manejo de marcas de nueva línea
Peticiones Proxy
Resolución de cabeceras duplicadas o en conflicto
Valores de cabecera delimitados por punto y coma
Conjuntos de caracteres y esquemas de codificación en las cabeceras
Comportamiento de la cabecera Referer
Tipos de peticiones HTTP
GET
POST
HEAD
OPTIONS
PUT
DELETE
TRACE
CONNECT
Otros métodos HTTP
Códigos de respuesta del servidor
200-299: éxito
300-399: redirección y otros mensajes de estado
400-499: error en el lado del cliente
500-599: error en el lado del servidor
Coherencia de la señalización de códigos HTTP
Conexiones persistentes
Transferencia de datos fragmentados
Comportamiento de la caché
Semánticas de cookies HTTP
Autentificación HTTP
Encriptación a nivel de protocolo y certificados de cliente
Certificados de validación ampliados
Reglas de gestión de errores
4. El lenguaje de etiquetas de hipertexto
Conceptos básicos tras los documentos HTML
Modos de análisis de documentos
La batalla de las semánticas
El comportamiento de los analizadores de HTML
Interacciones entre varias etiquetas
Condicionales explícitos e implícitos
Consejos de supervivencia para el análisis de HTML
Codificación de entidades
Semánticas de integración HTTP/HTML
Hipervínculos e inclusión de contenido
Vínculos sencillos
Formularios y peticiones activadas por formularios
Marcos
Inclusión de contenido de un tipo específico
Una nota sobre la falsificación de peticiones de sitios cruzados
5. Hojas de estilo en cascada
Sintaxis básica de CSS
Definiciones de propiedades
Directivas @ y vinculaciones XBL
Interacciones con HTML
Riesgos de la resincronización del analizador
Codificación de caracteres
6. Script en el lado del navegador
Características básicas de JavaScript
El modelo de proceso de script
Análisis
Resolución de funciones
Control del orden de ejecución
Capacidades de inspección de objetos y código
Modificar el entorno en tiempo de ejecución
Anular complementos
Funciones set y get
Impacto de los usos potenciales del lenguaje
Notación de objetos JavaScript y otras serializaciones de datos
E4X y otras extensiones de sintaxis
Jerarquía de objetos estándar
El modelo de objetos de documento, DOM
Acceso a otros documentos
Codificación de caracteres en los script
Modos de inclusión de código y riesgos de anidación
El muerto viviente: Visual Basic
7. Tipos de documentos no HTML
Archivos de texto
Imágenes de mapa de bits
Audio y vídeo
Documentos basados en XML
Vista genérica de XML
Gráficos vectoriales escalables
Lenguaje de etiquetas matemáticas
Lenguaje de interfaz de usuario XML
Lenguaje de etiquetas inalámbrico
Orígenes de datos RSS y Atom
Una nota sobre tipos de archivos no legibles
8. Representación de contenidos con complementos de navegador
Llamar a un complemento
Los peligros de manejar la cabecera Content-Type para complementos
Ayudas para la representación de documentos
Marcos de trabajo de aplicaciones basadas en complementos
Adobe Flash
Propiedades de ActionScript
Microsoft Silverlight
Java de Sun
XBAP (XML Browser Applications)
Controles ActiveX
Convivir con otros complementos
Parte II. Características de seguridad de los navegadores
9. Lógica de aislamiento de contenido
Directiva del mismo origen para el modelo de objetos de documento
document.domain
postMessage(…)
Interacciones con las credenciales del navegador
Directiva de mismo origen para XMLHttpRequest
Directiva de mismo origen para almacenamiento Web
Directivas de seguridad para cookies
Impacto de las cookies en la directiva de mismo origen
Problemas con las restricciones de dominio
El inusual peligro de "localhost"
Cookies y secuestro "legítimo" de DNS
Reglas de seguridad de complementos
Adobe Flash
Controles de seguridad a nivel de etiquetado
Security.allowDomain(…)
Archivos de directiva de dominios cruzados
Riesgos de suplantación en directivas de archivos
Microsoft Silverlight
Java
Hacer frente a orígenes ambiguos o inesperados
Direcciones IP
Nombres de host con puntos adicionales
Nombres de host no cualificados totalmente
Archivos locales
Seudo-URL
Extensiones del navegador e interfaz de usuario
Otros usos de orígenes
10. Herencia de origen
Herencia de origen para about:blank
Herencia para URL data:
Herencia de URL javascript: y vbscript:
Una nota sobre seudo-URL restringidas
11. La vida fuera de la regla del mismo origen
Interacciones de ventanas y marcos
Las aplicaciones web modernas están construidas sobre una maraña de tecnologías que se han ido desarrollando a lo largo del tiempo y que posteriormente se han ido reconstruyendo pieza a pieza al azar. Cada una de estas piezas, desde las solicitudes HTTP hasta los scripts en el lado del navegador, conlleva sutiles pero importantes consecuencias en la seguridad.
Para mantener seguros a los usuarios, es esencial que los desarrolladores creen un entorno donde poder navegar con confianza.
En este libro, Michael Zalewski intenta dar un paso adelante proporcionando un análisis sistemático y exhaustivo de la situación actual en el mundo de la seguridad de las aplicaciones web.
El autor explica exactamente cómo funcionan los navegadores y por qué son inseguros, revelando sus puntos débiles y proporcionando información crucial para reforzar la seguridad de nuestras aplicaciones web.