DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora...
Transcript of DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora...
![Page 1: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/1.jpg)
Bloque 3: Parte servidora (backend)
DISEÑODEAPLICACIONESWEB
TEMA3.4:SEGURIDADCONSPRINGSECURITY
![Page 2: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/2.jpg)
Disclaimer
• Estematerialestábasadoenunmaterialoriginalde:§ BoniGarcía([email protected])
SEGURIDADCONSPRINGSECURITY
2
![Page 3: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/3.jpg)
Índice de contenidos
1. Seguridadenredesdedatos2. Autenticaciónyautorización3. Confidencialidad
SEGURIDADCONSPRINGSECURITY
3
![Page 4: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/4.jpg)
Índice de contenidos
1. Seguridadenredesdedatos§ Serviciosdeseguridad
§ TLS
§ HTTPS2. Autenticaciónyautorización3. Confidencialidad
SEGURIDADCONSPRINGSECURITY
4
![Page 5: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/5.jpg)
1. Seguridad en redes de datos
Serviciosdeseguridad• Unserviciodeseguridadprotegelascomunicacionesdelosusuariosantedeterminadosataques.Losprincipalesson:§ Confidencialidad:Proporcionaprotecciónparaevitarquelosdatosseanreveladosaunusuarionoautorizado.
§ Autenticaciónyautorización:Sirveparagarantizarqueunaentidad(personaomáquina)esquiendiceser,ydeterminaraquérecursostieneacceso.
§ Integridad:Garantizaalreceptordelmensajequelosdatosrecibidoscoincidenexactamenteconlosenviadosporelemisor.
§ Norepudio:Impidequeunemisor/receptornieguehaberestadoinvolucradoenunacomunicación.
SEGURIDADCONSPRINGSECURITY
5
![Page 6: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/6.jpg)
1. Seguridad en redes de datos
Seguridadenredesdedatos• Laconfidencialidadseconsiguetípicamenteusandotécnicascriptográficas(cifradodemensajes).Tiposdesistemascriptográficos:§ Criptosistemasdeclavesecreta.Enellos,laclavede
cifradoydedescifradoeslamisma:esunaclavesecretaquecompartenelemisoryelreceptordelmensaje.Debidoaestacaracterísticasondenominadostambiéncriptosistemassimétricos
§ Criptosistemasdeclavepública.Sedistinguenporquecadausuarioosistemafinaldisponededosclaves:unaprivada,quedebemantenersecreta,yunapública,quedebeserconocidaportodaslasrestantesentidadesquevanacomunicarconella.Selosconocetambiéncomocriptosistemasasimétricos
SEGURIDADCONSPRINGSECURITY
6
![Page 7: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/7.jpg)
1. Seguridad en redes de datos
Seguridadenredesdedatos• Elcifradoasimétricoesmenosvulnerablequeelsimétrico,peroescomputacionalmentemuchomascostoso.
• Elmodelohíbridoesunmecanismopararealizarcomunicacionessegurasquecombinacifradoasimétricoysimétrico.§ Usandocifradoasimétrico,serealizaunintercambiodeclavespúblicas.
§ Usandolasclavespúblicasseintercambiaunaclavedesesión,simétrica,queseusaparaelrestodecomunicaciones.
7
SEGURIDADCONSPRINGSECURITY
![Page 8: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/8.jpg)
1. Seguridad en redes de datos
8
SEGURIDADCONSPRINGSECURITY
Clave pública del receptor
Clave de sesión
![Page 9: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/9.jpg)
1. Seguridad en redes de datos
Seguridadenredesdedatos• Laautenticaciónyautorizaciónseconsiguenmediante:
§ Algoquesabes.Porejemplo,unascredencialeslogin-password.
§ Algoquetienes.Porejemplo,unatarjetadeacceso.
§ Algoqueeres.Porejemplo,cualidadesbiométricas(huelladigital…).
• LaintegridadseconsiguetípicamenteconfuncionesHash(resumen)
§ Sonfuncionescomputablesmedianteunalgoritmoqueconvierteunaentradabinaria(típicamenteunficheroounmensajedigital)aunrangodesalidafinito(típicamenteunacadenasalfanumérica)
• Elnorepudioseconsiguemedianteregistrosprotegidosdelaactividaddelosusuarios,siempreycuandosegaranticesuautenticaciónylaintegridaddelproceso.
SEGURIDADCONSPRINGSECURITY
9
![Page 10: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/10.jpg)
1. Seguridad en redes de datos
Serviciosdeseguridad• Firmadigital:
§ Unafunciónhashsepuedeusarparacalcularun“resumen”deunmensaje(checksum).
§ Paraprotegerelresumen,secifrautilizandounaclaveprivada.
SEGURIDADCONSPRINGSECURITY
10
![Page 11: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/11.jpg)
1. Seguridad en redes de datos
Serviciosdeseguridad• Enloscriptosistemasdeclavepública,uncertificadodigitalesundocumentoelectrónicoqueasociaelnombredeunaentidadconsuclavepúblicaduranteundeterminadoperiododevalidez.
• ElcertificadodigitalesemitidoporunaAutoridaddeCertificación(CA),osea,la“TerceraPartedeConfianza”(TTP,TrustedThirdParty)
• Loscertificadosusadosenaplicacioneswebasocianundominiowebasuclavepública.
• Tipodecertificadomásutilizado:X.509(estándardelITU-T).
SEGURIDADCONSPRINGSECURITY
11
![Page 12: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/12.jpg)
1. Seguridad en redes de datos SEGURIDADCONSPRINGSECURITY
12
![Page 13: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/13.jpg)
1. Seguridad en redes de datos
Serviciosdeseguridad• Ejemplosdealgoritmos:
SEGURIDADCONSPRINGSECURITY
13
Criptosistemas asimétricos § RSA (Rivest, Shamir y Adleman) § Diffie-Hellman § ElGamal § Criptografía de curva elíptica
Criptosistemas simétricos § AES (Advanced Encryption Standard) § ES (Data Encryption Standard) § IDEA (International Data Encryption
Algorithm) § 3DES § RC2, RC4, RC5 § Blowfish Funciones hash
§ SHA (Secure Hash Algorithm) § MD5 (Message-Digest Algorithm 5) § DSA (Digital Signature Algorithm)
![Page 14: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/14.jpg)
1. Seguridad en redes de datos
TLS• TLS(TransportLayerSecurity)esunprotocolocriptográficodenivelde
transportequesigueunmodelodecifradohíbrido(asimétrico+simétrico)yqueproporcionacomunicacionessegurassobreTCP.§ EslaversiónevolucionadadeSSL(SecureSocketsLayer).
§ Enoctubrede2014sedescubrióunavulnerabilidadcríticaenSSL3.0quehacequesuusoestédesaconsejado.
• LosserviciosdeseguridadofrecidosporSSL/TLSson:§ Confidencialidad:secifraelintercambiodedatosanivelTCP.
§ Autenticación:entidadespuedenconfirmarsuidentidad.Enunprotocolocliente-servidorsóloelservidoresautenticado(esdecir,segarantizasuidentidad)mientrasqueelclientesemantienesinautenticar
§ Integridad:seusaunafunciónhashparagarantizarlaintegridaddedatos
SEGURIDADCONSPRINGSECURITY
14
![Page 15: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/15.jpg)
1. Seguridad en redes de datos
TLS• Paraestableceruncanalsegurocifrado,lasentidadestienenquellegaraun
acuerdo(handshake)
• Elhandshaketienevariasfases:1. Establecimientodecaracterísticasseguridad(algoritmocifrado,etc).
2. Elservidorenvíasucertificadodigital.
3. Elclienteestablecelaclavemaestra(MS,MasterSecret)� Opcionalmenteelclientepuedemandarsucertificadoenestafase.� Enaplicacionesweb(HTTPS),elservidoreselúnicoautenticado,esdecir,sóloel
servidorenvíauncertificadoalcliente.
4. Finalizacióndelhandshakeeiniciodecomunicaciónsegura.
• Despuésdelhandshakeelintercambiodetráficoseproducemediantecifradodeltráficobasadoencifradosimétrico.
SEGURIDADCONSPRINGSECURITY
15
![Page 16: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/16.jpg)
1. Seguridad en redes de datos
TLS• Handshake:
SEGURIDADCONSPRINGSECURITY
16
ServerHello
Certificate
ServerHelloDone
Finished
ChangeCipherSpec
ClientHello
ChangeCipherSpec
Finished
cliente servidor
Fase 1. Inicio
Fase 2. El servidor manda el certificado
Fase 4. Finalización
Intercambio de datos en canal seguro mediante cifrado simétrico
ClientKeyExchange Fase 3. Establecimiento de clave maestra (MS, Master Secret)
![Page 17: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/17.jpg)
1. Seguridad en redes de datos
TLS• Handshake:
SEGURIDADCONSPRINGSECURITY
17
ServerHello
Certificate
ServerHelloDone
Finished
ChangeCipherSpec
ClientHello
ChangeCipherSpec
Finished
cliente servidor
ClientKeyExchange
El cliente genera una clave maestra MS que será usada para cifrar todos los datos de la sesión segura. Esta clave se envía cifrada con la clave pública del servidor, obtenida a partir del certificado
El servidor obtiene la clave maestra MS descifrando el mensaje enviado por el cliente, usando para ello su clave privada
Al enviar el certificado el servidor está mandando su clave pública al cliente
![Page 18: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/18.jpg)
1. Seguridad en redes de datos
HTTPS• HypertextTransferProtocolSecure.VersiónseguradeHTTP.• HTTPSnoesmásqueHTTPsobreTLS/SSL.
• ConHTTPSseconsiguequelainformaciónsensible(claves,etc)nopuedaserinterceptadaporunatacante,yaqueloúnicoqueobtendráseráunflujodedatoscifradosqueleresultaráimposiblededescifrar.
• PuertoTCPpordefectoenservidoresHTTPS:443
SEGURIDADCONSPRINGSECURITY
18
HTTPS TLS
TCP
IP
![Page 19: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/19.jpg)
1. Seguridad en redes de datos
HTTPS• LosnavegadorestienenunalistadeCAsconocidas.• Alrecibiruncertificadonovalidomuestraunaalertadeseguridadalusuario.Estoocurrecuando:§ ElcertificadofirmadoporunaCAnoconocida(porejemplo,un
certificadoautofirmado).
§ Elcertificadohacaducado.
SEGURIDADCONSPRINGSECURITY
19
![Page 20: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/20.jpg)
Índice de contenidos
1. Seguridadenredesdedatos2. Autenticaciónyautorización
§ EjemploAAsencillo
§ EjemploAAmedio
§ EjemploAAavanzado3. Confidencialidad
SEGURIDADCONSPRINGSECURITY
20
![Page 21: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/21.jpg)
2. Autenticación y autorización
• VamosavercomoimplementarlosserviciosdeseguridaddeautenticaciónyautorizaciónenSpring(Boot+Security)estudiandotresejemplos:
1. Sencillo(proyectospring-security-aa-simple)� Usuariosenmemoria,rolúnico.
2. Medio(proyectospring-security-aa-medium)� Usuariosenmemoria,variosroles.
3. Avanzado(proyectospring-security-aa-advanced)� Usuariosenbasededatos,variosroles.
SEGURIDADCONSPRINGSECURITY
21
![Page 22: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/22.jpg)
2. Autenticación y autorización
EjemploAAsencillo:proyectospring-security-aa-simple
SEGURIDADCONSPRINGSECURITY
22
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.7.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> </dependencies>
![Page 23: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/23.jpg)
2. Autenticación y autorización
EjemploAAsencillo:proyectospring-security-aa-simple
SEGURIDADCONSPRINGSECURITY
23
@Controller public class SecurityController { @RequestMapping("/") public ModelAndView index() { return new ModelAndView("index"); } @RequestMapping("/login") public ModelAndView login() { return new ModelAndView("login"); } @RequestMapping("/home") public ModelAndView home() { return new ModelAndView("home"); } }
Controlador muy sencillo: sólo asocia URLs con vistas
![Page 24: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/24.jpg)
2. Autenticación y autorización
EjemploAAsencillo:proyectospring-security-aa-simple
SEGURIDADCONSPRINGSECURITY
24
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <body> Access to protected pages clicking <a th:href="@{/home}">here</a>! </body> </html>
Index.html
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Home</title> </head> <body> <h1>Hello Spring Security!</h1> <form th:action="@{/logout}" method="post"> <input type="submit" value="Sign Out”/> </form> </body> </html>
home.html
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Login form</title> </head> <body> <p th:if="${param.error}">Invalid credentials</p> <p th:if="${param.logout}">Logged out</p> <form th:action="@{/login}" method="post”> <label>User Name:</label> <input type="text" name="username” /> <br /> <label>Password:</label> <input type="password" name="password” /> <br /> <input type="submit" value="Sign In" /> <br /> </form> </body> </html>
login.html
![Page 25: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/25.jpg)
2. Autenticación y autorización
EjemploAAsencillo:proyectospring-security-aa-simple
SEGURIDADCONSPRINGSECURITY
25
@Configuration @EnableGlobalMethodSecurity public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers("/").permitAll(); http.authorizeRequests().anyRequest().authenticated(); http.formLogin().loginPage("/login").usernameParameter("username") .passwordParameter("password").defaultSuccessUrl("/home") .failureUrl("/login?error").permitAll(); http.logout().logoutUrl("/logout").logoutSuccessUrl("/login?logout") .permitAll(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication().withUser("user").password("p1") .roles("USER"); } }
El path “/” tendrá acceso permitido. El resto necesitará autenticación
Autenticación basada en formulario
Página para la desconexión
Un único usuario (en memoría)
![Page 26: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/26.jpg)
2. Autenticación y autorización
EjemploAAsencillo:proyectospring-security-aa-simple
SEGURIDADCONSPRINGSECURITY
26
/home es un recurso protegido, así que se redirige la navegación al formulario de login
Con las credenciales correctas vamos a /home
logout
![Page 27: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/27.jpg)
2. Autenticación y autorización
EjemploAAsencillo:proyectospring-security-aa-simple
• Todaslasvistasincorporanunamedidadeseguridadautomática:untokenautomáticoCSRF(CrossSiteRequestForgery).
• Estetokenlogeneraelservidorparacadapeticiónyesrequeridoparapoderrecibirdatosdelcliente.
SEGURIDADCONSPRINGSECURITY
27
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Home</title> </head> <body> <h1>Hello Spring Security!</h1> <form th:action="@{/logout}" method="post"> <input type="submit" value="Sign Out" /> </form> </body> </html>
<!DOCTYPE html> <html> <head> <title>Home</title> </head> <body> <h1>Hello Spring Security!</h1> <form method="post" action="/logout"> <input type="submit" value="Sign Out" /> <input type="hidden" name="_csrf" value="c54a70a7-1586-4dc3-8e64-4fac09625ce2" /></form> </body> </html>
![Page 28: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/28.jpg)
2. Autenticación y autorización
EjemploAAmedio:proyectospring-security-aa-medium
SEGURIDADCONSPRINGSECURITY
28
Proyecto con la misma estructura salvo que tiene una vista más
![Page 29: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/29.jpg)
2. Autenticación y autorización
EjemploAAmedio:proyectospring-security-aa-medium
SEGURIDADCONSPRINGSECURITY
29
@Configuration @EnableGlobalMethodSecurity(securedEnabled = true) public class SecurityConfiguration extends WebSecurityConfigurerAdapter { // Same authentication schema than example before @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // Authorization auth.inMemoryAuthentication().withUser("user").password("p1") .roles("USER"); auth.inMemoryAuthentication().withUser("root").password("p2") .roles("USER", "ADMIN"); } }
Cambiamos la anotación que define el método de seguridad para poder restringir la autorización de los métodos controladores a ciertos roles de usuario
Dos usuarios en memoria de diferente tipo (rol)
![Page 30: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/30.jpg)
2. Autenticación y autorización
EjemploAAmedio:proyectospring-security-aa-medium
SEGURIDADCONSPRINGSECURITY
30
@Controller public class SecurityController { @RequestMapping("/") public ModelAndView index() { return new ModelAndView("index"); } @RequestMapping("/login") public ModelAndView login() { return new ModelAndView("login"); }
@Secured({ "ROLE_USER", "ROLE_ADMIN" }) @RequestMapping("/home") public ModelAndView home() { Authentication auth = SecurityContextHolder .getContext().getAuthentication(); String name = auth.getName(); ModelAndView model = new ModelAndView("home") .addObject("name", name); return model; } @Secured("ROLE_ADMIN") @RequestMapping("/root") public ModelAndView root() { return new ModelAndView("root"); } }
Los métodos protegidos se anotan con @Secured y el nombre del rol (con prefijo ROLE_)
![Page 31: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/31.jpg)
2. Autenticación y autorización
EjemploAAavanzado:proyectospring-security-aa-advanced
SEGURIDADCONSPRINGSECURITY
31
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> </dependencies>
![Page 32: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/32.jpg)
2. Autenticación y autorización
EjemploAAavanzado:proyectospring-security-aa-advanced
SEGURIDADCONSPRINGSECURITY
32
@Component public class DatabaseLoader { @Autowired private UserRepository userRepository; @PostConstruct private void initDatabase() { // User #1: "user", with password "p1" and role "USER" GrantedAuthority[] userRoles = { new SimpleGrantedAuthority("ROLE_USER") }; userRepository.save(new User("user", "p1", Arrays.asList(userRoles))); // User #2: "root", with password "p2" and roles "USER" and "ADMIN" GrantedAuthority[] adminRoles = { new SimpleGrantedAuthority("ROLE_USER"), new SimpleGrantedAuthority("ROLE_ADMIN") }; userRepository.save(new User("root", "p2", Arrays.asList(adminRoles))); } }
Componente usado para popular la base de datos (se ejecutará al iniciar la aplicación)
![Page 33: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/33.jpg)
2. Autenticación y autorización
EjemploAAavanzado:proyectospring-security-aa-advanced
SEGURIDADCONSPRINGSECURITY
33
@Entity public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String user; private String password; @ElementCollection(fetch = FetchType.EAGER) private List<GrantedAuthority> roles; public User() { } public User(String user, String password, List<GrantedAuthority> roles) { this.user = user; this.password = new BCryptPasswordEncoder().encode(password); this.roles = roles; } // getters, setters }
Entidad persistente que almacenará las credenciales de usuario y sus roles
Las contraseñas nunca se deben almacenar en claro (hay que usar cifrado o función hash)
![Page 34: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/34.jpg)
2. Autenticación y autorización
EjemploAAavanzado:proyectospring-security-aa-advanced
SEGURIDADCONSPRINGSECURITY
34
@Configuration @EnableGlobalMethodSecurity(securedEnabled = true) public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Autowired public CustomAuthenticationProvider authenticationProvider; // Same authentication schema than examples before @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { // Database authentication provider auth.authenticationProvider(authenticationProvider); } }
El gestor de autenticación ya no son credenciales en memoria
public interface UserRepository extends CrudRepository<User, Long> { User findByUser(String user); }
Repositorio de usuarios
![Page 35: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/35.jpg)
2. Autenticación y autorización
EjemploAAavanzado:proyectospring-security-aa-advanced
SEGURIDADCONSPRINGSECURITY
35
@Component public class CustomAuthenticationProvider implements AuthenticationProvider { @Autowired private UserRepository userRepository; @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { String username = authentication.getName(); String password = (String) authentication.getCredentials(); User user = userRepository.findByUser(username); if (user == null) { throw new BadCredentialsException("User not found"); } if (!new BCryptPasswordEncoder().matches(password, user.getPasswordHash())) { throw new BadCredentialsException("Wrong password"); } List<GrantedAuthority> roles = user.getRoles(); return new UsernamePasswordAuthenticationToken(username, password, roles); } }
Se inyecta repositorio de usuario
Lectura de credenciales del formulario
Se comprueba usuario y contraseña
Lectura de lista de roles
![Page 36: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/36.jpg)
Índice de contenidos
1. Seguridadenredesdedatos2. Autenticaciónyautorización3. Confidencialidad
SEGURIDADCONSPRINGSECURITY
36
![Page 37: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/37.jpg)
3. Confidencialidad
Ejemplo:proyectospring-security-https
SEGURIDADCONSPRINGSECURITY
37
• Exactamenteigualqueproyectospring-security-aa-simpleexcepto:
§ application.properties:
§ keystore.jks:RepositoriodecertificadosJava
server.port=8443 server.ssl.key-store=classpath:keystore.jks server.ssl.key-store-password=password server.ssl.key-password=secret
![Page 38: DISEÑO DE APLICACIONES WEB Bloque 3: Parte servidora …laurel.datsi.fi.upm.es/_media/docencia/asignaturas/daw/... · 2016-04-21 · 1. Seguridad en redes de datos Seguridad en redes](https://reader034.fdocumento.com/reader034/viewer/2022042111/5e8bfd57f023de260a7e70fe/html5/thumbnails/38.jpg)
3. Confidencialidad
Ejemplo:proyectospring-security-https
• keystore.jkssecreaconherramientakeytool(incorporadaenJRE)
SEGURIDADCONSPRINGSECURITY
38
$ $JAVA_HOME/bin/keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 365 -keysize 2048 ¿Cuáles son su nombre y su apellido? [Unknown]: Jesus Montes ¿Cuál es el nombre de su unidad de organización? [Unknown]: Programacion Web ¿Cuál es el nombre de su organización? [Unknown]: UPM ¿Cuál es el nombre de su ciudad o localidad? [Unknown]: Madrid ¿Cuál es el nombre de su estado o provincia? [Unknown]: Madrid ¿Cuál es el código de país de dos letras de la unidad? [Unknown]: ES ¿Es correcto CN=Jesus Montes, OU=Programacion Web, O=UPM, L=Madrid, ST=Madrid, C=ES? [no]: si Introduzca la contraseña de clave para <selfsigned> (INTRO si es la misma contraseña que la del almacén de claves): secret Volver a escribir la contraseña nueva: secret