Resumen Tema 09 - Diseño y Desarrollo de Aplicaciones

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 38

Bases de datos

Capítulo 9: Diseño y desarrollo de aplicaciones


2

Contenido

• Interfaces de usuario y programas de aplicación


• Fundamentos de la web
• Servlets y JSP
• Arquitecturas de aplicación
• Desarrollo rápido de aplicaciones
• Rendimiento de la aplicación
• Seguridad de las aplicaciones
• Cifrado y sus aplicaciones
3

Interfaces de usuario y programas de aplicación


• La mayoría de los usuarios de bases de datos no utilizan directamente un lenguaje de
consultas como SQL
• Un programa de aplicación hace de intermediario entre el los usuarios y la base de datos
– Componentes de un programa de aplicación típico:
• Front-end: interfaz con el usuario
– Formularios
– Interfaces gráficos con el usuario
• Capa intermedia: ”lógica de negocio”.
– Ejecuta las peticiones concretas de información o actualizaciones
– Acciones que hay que llevar a cabo para ejecutar una determinada tarea
– Quién puede realizar una tarea
• Back-end: se comunica con la base de datos
4

Interfaz Web
• Los navegadores web se han convertido en la interfaz de usuario estándar de facto para
bases de datos
– Permiten a gran número de usuarios acceder a bases de datos desde cualquier lugar
– Evitan la necesidad de descargar/instalar código especializado, a la vez que proporciona
una buena interfaz gráfica de usuario
• JavaScript (lenguaje de script) se ejecutan en el navegador, pero se descargar de forma
transparente
Ejemplos: acceso a cuentas bancarias, reservas de aviones, compras, matricula en
universidad, etc.
5

WWW – World Wide Web


• WWW es un sistema de información distribuida basada en hipertextos
• La mayoría de los documentos web son hipertextos creados mediante HTML (HyperText
Markup Language)
• Un documento HTML contiene:
– Texto, imágenes, contenido multimedia
– Enlaces de otros documentos
– Formularios que permiten a los usuarios introducir datos a enviar al servidor Web
6

WWW - URL
• URL: Uniform Resource Locator: nombre globalmente único para cada documento al que se
puede tener acceso en web
– Ejemplo: http://www.acm.org/sigmod
• Primera parte: indica el modo o protoco de acceso al documento
– http: documento HTML
• Segunda parte: dirección de la máquina
• Resto: identificador local con camino al recurso o documento dentro de la máquina
• El identificador local puede ser:
– El camino y nombre de un fichero dentro de la máquina
– Un identificador de un programa más argumentos a pasar al dicho programa:
• Ejemplo: http://www.google.com/search?q=silberschatz
7

HTML y HTTP
• HTML proporciona características para
– Formateo de la información
– Enlaces hipertexto
– Hojas de estilo (separar el contenido del formato)
• HTML también tiene características para entrada de información
– Selección desde un conjunto de opciones
• Menús desplegables, listas de verificación, casillas seleccionables
– Introducción de información
• Cuadros de texto
– Enviar la información al servidor para ser tratada por alguna aplicación
• El protocolo HTTP es el usado por la comunicación con el servidor Web
8

Ejemplo de código HTML


9

Métodos de envío de información al servidor


• HTTP define dos formas para que los valores que introduzca el usuario en el navegador web
se envíen al servidor web
• Método get: codifica los valores formando parte de la URL.
– Ejemplo: http://www.google.com/search?q=silberschatz

• Método post: manda el valor de los parámetros como parte del intercambio del protocolo
HTTP entre el servidor web y el navegador.
10

Servidores web
• Los servidores web son programas que se ejecutan en la máquina servidora, que aceptan las
solicitudes de los navegadores web y devuelven los resultados en forma de documentos
HTML
• El nombre de documento en un URL puede identificar una aplicación que, al ejecutarse,
genera un documento HTML
– Cuando un servidor Web recibe una solicitud de dicho documento, ejecuta el programa y
devuelve el documento HTML generado por dicho programa
– El cliente web puede pasar argumentos extra junto con el nombre del documento o
aplicación/servicio del servidor
• Para instalar un nuevo servicio web, hay que crear e instalar en el servidor el ejecutable que
proporciona ese servicio
11

Servidores web
• La mayor parte de los servicios web de hoy en día usan una arquitectura web de dos capas,
en la que los programas de las aplicaciones se ejecutan en el servidor web
12

HTTP y sesiones
• El protocolo HTTP es sin conexión
– No existe ninguna conexión continua entre los clientes y los servidores web; cuando un servidor
web recibe una solicitud, se crea temporalmente una conexión para enviar la solicitud y recibir la
respuesta del servidor web
– Una vez que el servidor responde a una petición, el servidor cierra la conexión con el cliente
• A diferencia de JDBC/ODBC que permanecen conectadas hasta que el cliente desconecta
– Conservan la autenticación del usuario y otra información
– Justificación: reduce la carga en el servidor
• Los sistemas operativos tienen límites estrictos sobre el número de conexiones abiertas en una
máquina
• Las aplicaciones web necesitan información de sesión para permitir una interacción significativa con
el usuario:
– Solución: usar una cookie
13

HTTP y sesiones
• Una cookie no es más que un pequeño fragmento de texto, con un nombre asociado,
que contiene información de identificación
– Enviada por el servidor al navegador
• En la primera interacción para identificar la sesión
– Enviada por el navegador al servidor que la creó en siguientes interacciones
• Parte del protocolo HTTP
• Identifican al usuario en visitas posteriores
– El servidor guarda información sobre las cookies que ha emitido
• Identificador de sesión
• Invalidar (eliminar) la sesión tras un periodo de inactividad o cuando el usuario
la cierre
• Las cookies pueden grabarse permanentemente o por tiempo limitado
14

Servlets
• En la arquitectura web de dos capas, las aplicaciones se ejecutan como parte del
propio servidor web.
• Un modo de implementar esta arquitectura es cargar los programas Java en el servidor
web.
• La especificación servlet de Java define una API (Application Programming Interface)
para la comunicación entre el servidor web y las aplicaciones ejecutándose en el
servidor
• El código del servlet se carga en el servidor web cuando se inicia el servidor, o cuando
el servidor recibe una solicitud HTTP remota para ejecutar un servlet concreto.
– La tarea del servlet es procesar esa solicitud
• Por ejemplo:
– Acceder a una base de datos
– Generar dinámicamente una página HTML
15

Servlets
servlet PersonQueryServlet
Página web

Formulario:
Action=
“PersonQuery”
Se debe indicar al servidor web que el
servlet PersonQueryServlet se va a
utilizar para tratar las solicitudes de
PersonQuery
16

Servlets y sesiones
• La API servlet admite el manejo de sesiones
– Establece una cookie en la primera interacción con el navegador y la utiliza para
identificar sesiones en otras interacciones
• Para comprobar si una sesión está activa todavía:
– if(request.getSession(false) == true)
then (manejar conexión existente)
else (redirigir a la página de autenticación)
– Página de autenticación
• Comprobar login/password
• Crear una nueva sesión: request.getSession(true)
• Almacenar / recuperar pares de valores de atributos para una sesión en particular
– session.setAttribute(“userid”, userid)
– session.getAttribute(“userid”)
17

Ciclo de vida de los servlets


• El ciclo de vida de cada servlet está controlado por el servidor web en el que se ha
desplegado
– Cuando hay una solicitud de un cliente para un servlet concreto, el servidor primero
comprueba si existe algún ejemplar de ese servlet o no:
– Si no existe, el servidor web carga la clase del servlet en la máquina virtual de Java
(Java virtual machine , JVM)
– Crea un ejemplar de la clase del servlet.
– El servidor llama al método init() para inicializar el ejemplar del servlet
– Cuando existe el ejemplar del servlet, el servidor invoca el método service() del
servlet, con un objeto request y un objeto response como parámetros.
– Cuando ya no sea necesario, se puede cerrar el servlet llamando al método destroy()
18

Secuencias de comandos en el lado del servidor


• Un enfoque alternativo, el de las secuencias de comandos en el lado del servidor, ofrece un
método mucho más sencillo para la creación de múltiples aplicaciones.
– Los lenguajes de script (guiones) ofrecen estructura que pueden incluirse en los
documentos HTML.
– En los script en el lado del servidor, antes de entregar una página web, el servidor ejecuta
las secuencias incluidas en el contenido de la página en HTML
– El código fuente de los script se elimina de la página, de modo que puede que el cliente
ni siquiera se dé cuenta de que la página contenía originalmente algún código
19

PHP
• PHP es un lenguaje de script en el lado del servidor muy utilizado.
– El código en PHP se puede mezclar con el código en HTML
– Los caracteres <?php indican el comienzo de código en PHP
– Los caracteres ?> indican el fin del código en PHP
• Un servidor web configurado apropiadamente interpreta cualquier archivo cuyo nombre termine en
.php como un archivo PHP.
– Sí se solícita este archivo, el servidor web lo procesa y devuelve el código HTML generado al
navegador.
• Existen distintas bibliotecas disponibles para el lenguaje PHP, incluyendo bibliotecas para el acceso a
bases de datos usando ODBC
20

Secuencias de comandos en el lado del cliente


• Los navegadores pueden tratar ciertos scripts (scripts del lado del cliente) o programas junto
con los documentos, y ejecutarlos de forma segura en el propio navegador del cliente
– Javascript
– Macromedia Flash
– Applets
• Los scripts/programas del lado del cliente, permiten dotar de dinamismo a los documentos
– Animaciones ejecutando programas en local
– Validación de valores introducidos por los usuarios
– Interacción más flexible con el usuario
• Ejecutando programas en el lado del cliente acelera la interacción evitando accesos al
servidor
21

Scripts en el lado del cliente y seguridad


• Son necesarios mecanismos de seguridad que aseguren que scripts maliciosos no causan
daños en la máquina del cliente
– Sencillo para lenguajes de script con capacidades limitadas
– Complicado para para programa de propósito general como Java
• El sistema de seguridad de Java asegura que el código de una applet de Java no puede hacer
llamadas al sistema directamente
– Deshabilitadas acciones peligrosas como escritura de ficheros
– Notificaciones al usuario de potenciales acciones peligrosas
• Permite abortar o continuar la ejecución del programa
22

JavaScript
• Lenguaje de script más usado
– La generación actual de interfaces web usa el lenguaje JavaScript intensivamente para construir
interfaces de usuario sofisticadas
• Con código JavaScript se puede:
– Validar datos introducidos por el usuario
– Modificar dinámicamente el código HTML que se muestra
• Acceso al (DOM: Document Object Model) que representa en forma de árbol el documento
HTML
– Comunicarse con un servidor Web para buscar datos y modificar la página actual utilizando
datos obtenidos, sin necesidad de volver a cargar / actualizar la página
• Forma parte de las tecnologías AJAX (Asynchronous JavaScript And XML)
– Los programas escritos en JavaScript se comunican con el servidor web de forma
asíncrona, es decir, en segundo plano, sin bloquear la interacción del usuario con el
navegador web, y pueden obtener información y mostrarla
– Ejemplo: se hace selección de país en menú, se genera la lista de estados/provincias
automáticamente en otro menú
23

JavaScript
• Ejemplo: Código JavaScript usado para validar un formulario de entrada de datos.
24

Leer en el libro las secciones:

• 9.4 Arquitecturas de aplicación


• 9.5 Desarrollo rápido de aplicaciones
• 9.6 Rendimiento de la aplicación
25

Mejorando rendimiento de servidores web


• Rendimiento es un tema importante en sitios Web populares
– Millones de usuarios al día
– Picos con miles de peticiones por segundo
• Técnicas de almacenamiento en caché utilizadas para reducir el costo de la publicación de
páginas mediante la explotación de puntos comunes entre las solicitudes:
– En el sitio del servidor:
• Almacenamiento en caché de conexiones JDBC entre solicitudes de servlet
– Uso de bancos de conexiones abiertas
• Resultados del caché de consultas de base de datos
– Los resultados almacenados en caché deben actualizarse si la base de datos
subyacente cambia
• Almacenamiento en caché del HTML generado
– En la red del cliente:
• Almacenamiento en caché de páginas por proxy web
26

Seguridad de las aplicaciones


• El primer punto en el que reforzar la seguridad es en la aplicación.
– Para ello, las aplicaciones deben autenticar a los usuarios y asegurar que solo se les permite
realizar las tareas autorizadas
• Hay muchas formas en que se puede ver comprometida la seguridad de una aplicación, incluso
aunque el sistema de base de datos sea seguro, debido a una aplicación mal escrita.
• Inyección SQL:
– El atacante consigue que una aplicación ejecute una consulta SQL creada por el atacante
• Secuencias de comandos en sitios cruzados (XSS: cross-site scripting)
– Un usuario malicioso introduce código escrito en un lenguaje de secuencias de comandos
como JavaScript o Flash, en lugar de un nombre válido o un comentario
– Cuando un usuario diferente ve el texto introducido el navegador puede ejecutar una
secuencia de comandos maliciosos:
• Leer cookies privadas
• Ejecutar acción en servidor Web
27

Seguridad de las aplicaciones


• Falsificación de petición en sitios cruzados (XSRF o CSRF)
– El código HTML de una página ejecuta una acción en otra página
• Ejemplo: <img src =
http://mybank.com/transfermoney?amount=1000&toaccount=14523>
– Riesgo: un usuario que visita la página, ejecuta ese código en vez de mostrar una
imagen
• Proteger servidor Web frente ataque XSS/XSRF de otros sitios
– Asegurarse que la IP de la petición es la misma que la del usuario autenticado
– Nunca usar el método GET para realizar actualizaciones
• Recomendación actual del estándar HTTP
28

Fuga de contraseñas
• Nunca almacenar contraseñas, como contraseñas de bases de datos, en texto claro dentro
de scripts accesibles a los usuarios
– Por ejemplo, en ficheros directamente accesibles desde el servidor web
• Normalmente los servidores ejecutan, pero no suministran el código de los ficheros de
script .js o .php, pero hay formas sencillas de conseguirlos
• Restringir el acceso las bases de datos del servidor a IPs de máquinas ejecutando servidores
de aplicaciones
– Las bases de datos permiten configurar qué IPs tienen permitido el acceso
29

Autenticación de las aplicaciones


• La autenticación se refiere a la tarea de verificar la identidad de una persona/software que
se conecta a una aplicación
• La forma más simple de autenticación consiste en el uso de una contraseña secreta que hay
que presentar cuando un usuario se conecta a la aplicación.
• Desafortunadamente las contraseñas se comprometen fácilmente:
– Contraseñas adivinables
– Leyendo los paquetes enviados por la red si las contraseñas no van encriptadas
• La autenticación en dos pasos:
– Contraseña más otra enviada por SMS, teléfono, correo, etc
– Existen dos pasos distintos, es decir, piezas de información o procesos que se usan para
identificar al usuario
30

Autenticación de las aplicaciones


• Hay que tener en cuenta que incluso en la autenticación en dos pasos, los usuarios siguen
siendo vulnerables a un ataque de hombre en el medio.
– En estos ataques, un usuario que intenta conectarse a la aplicación es desviado a un
sitio web falso, que acepta la contraseña, incluyendo la contraseña del segundo paso,
y la usa inmediatamente para autenticarse en la aplicación original
– El protocolo HTTPS, se usa para autenticar a los usuarios de un sitio web de forma que
el usuario no se conecte a un sitio falso creyendo que era el sitio que pretendía
• Autenticación centralizada dentro de una organización
– La aplicación se redirecciona a un servicio central de autenticación
– Se evitan múltiples sitios con acceso a contraseñas de usuario
– LDAP (Lightweight Directory Access Protocol )
31

Autorización a nivel de aplicación


• Aunque la norma de SQL admite un sistema bastante flexible de autorización basado en
roles el modelo de autorización de SQL desempeña un papel muy limitado en la gestión de
las autorizaciones de usuario en una aplicación típica
– Por ejemplo, suponga que desea que todos los estudiantes vean sus notas, pero no las
notas de los otros. Esta autorización no se puede especificar en SQL por las siguientes
dos razones:
• Falta de información sobre el usuario final concreto
• Falta de autorización de grano fino. La autorización debe realizarse en el nivel de las
tuplas individuales, si se desea autorizar a los estudiantes a que vean sólo sus propias
notas
• Alternativa: crear una vista: donde la función syscontext.user_id() devuelve el
identificador del usuario de la aplicación en cuyo nombre se ejecuta la consulta
32

Trazas de auditoría
• Una traza de auditoría es un registro histórico de todas las modificaciones
(inserciones/borrados/actualizaciones) de la base de datos junto con información sobre el
usuario que realizó el cambio y el momento en que se produjo.
• Se utiliza para trazar actualizaciones erróneas/fraudulentas
• Se pueden implementar utilizando disparadores, pero la mayoría de las bases de datos
disponen de mecanismos directos
33

Encriptación y sus aplicaciones


• El cifrado se refiere al proceso de transformar los datos de forma que no sean legibles,
hasta que se aplica el proceso inverso de descifrado.
– Los algoritmos de cifrado usan una clave de cifrado para realizar el cifrado y necesitan
una clave de descifrado (que puede ser la misma que la de cifrado o no, dependiendo
del algoritmo utilizado), para realizar el descifrado.
• En el contexto de las bases de datos, el cifrado se usa para guardar los datos de forma
segura, de modo que aunque se consigan por un usuario no autorizado no se pueda
acceder a ellos sin la clave de descifrado
• Propiedades de un buen cifrado:
– Relativamente sencillo el cifrado y descifrado de los datos
– No depende del secreto del algoritmo, sino de un parámetro del algoritmo
denominado clave de cifrado, que se usa para cifrar los datos
– Tiene que ser difícil para un intruso determinar la clave
34

Técnicas de encriptación
• La Advanced Encryption Standard (AES, Norma de
cifrado avanzado) es un algoritmo de cifrado de
clave simétrica que fue adoptado como norma de
cifrado por el Gobierno de los EE.UU. en el año 2000,
y ahora se usa extensamente.
• El cifrado de clave pública se basa en cada uno de
los usuarios que tienen dos claves:
– clave pública – la clave conocida públicamente se
utiliza para cifrar datos, pero no se puede utilizar
para descifar
– clave privada – clave conocida sólo por el usuario
individual, y utilizada para descifrar datos. No
necesita transmitirse al sitio que hace el cifrado.
– El esquema de cifrado se hace de tal forma que es
imposible, o extremadamente difícil, descifrar
datos dada sólo la clave pública.
35

Técnicas de encriptación
• Pese a que el cifrado de clave pública que usa el esquema descrito es seguro, también es
costoso en cuanto a cálculo.
• Un esquema híbrido usado para proteger las comunicaciones combina la encriptación con
clave pública y privada para la encriptación eficiente de grandes cantidades de datos
– Se genera de forma aleatoria una clave de cifrado simétrica y se intercambia de forma
segura usando un esquema de cifrado de clave pública, entonces se usa el cifrado de
clave simétrica usando dicha clave para los datos que se transmitan después
36

Encriptación en bases de datos


• Las bases de datos soportan la encriptación
• Niveles de encriptación de bases de datos
– Bloques de disco
• Cada bloque del disco está encriptado empleando una clave disponible en el sistema de
base de tados
• Si un atacante accede a los datos de la base de datos, no puede desencriptarlor sin
conocer la clave de encriptación
– Relaciones enteras o algunos atributos de las relaciones
• Relaciones completas o algunos atributos con información no sensible, no es necesario
encriptarlos
• Atributos que sean claves primarias / claves ajenas, no pueden ser encriptados
37

Certificados digitales
• Los certificados digitales se usan para verificar la autenticidad de las claves públicas
• Problema: cuando se comunica con un sitio web, ¿cómo se sabe si se está comunicando un un sitio
web genuino o con un impostor?
– Solución: utilizar la clave pública del sitio web
– Problema: cómo verificar que la propia clave pública es la genuina
• Solución:
– Cada cliente (ej. navegador) tiene claves públicas de unas pocas autoridades de certificación de
nivel raíz
– Un sitio puede obtener su nombre/URL y la clave pública firmada por una autoridad de
certificación: el documento firmado se llama un certificado
– El cliente puede utilizar la clave pública de la autoridad de certificación para verificar el certificado
– Pueden existir varios niveles de autoridades de certificación. Cada autoridad de certificación
• Presenta su propio certificado de clave pública firmado por una autoridad de certificación de
mayor nivel, y
• Utiliza su clave privada para firmar el certificado a otras autoridades/sitios web.
38

Firma digital
• Otra aplicación interesante del cifrado de clave pública está en la firma digital para
comprobar la autenticidad de los datos
– La firma digital desempeña el rol electrónico de las firmas físicas en los documentos.
• La clave privada se usa para “firmar” es decir, cifrar los datos, y los datos firmados se
pueden hacer públicos.
• Cualquiera puede comprobar la firma descifrando los datos con la clave pública, pero
nadie puede haber generado los datos firmados sin tener la clave privada.

– Se invierten los roles de las claves pública y privada en este esquema. Por tanto, se
pueden autenticar los datos; es decir, se puede comprobar que fueron creados realmente
por la persona que afirma haberlos creado.

También podría gustarte