cc3201-1 b datos o 2017 clase 8: sql...

21
CC3201-1 BASES DE D ATOS O TOÑO 2017 Clase 8: SQL (IV) Acceso programático Aidan Hogan [email protected]

Upload: others

Post on 20-Aug-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

CC3201-1BASES DE DATOS

OTOÑO 2017

Clase 8: SQL (IV) Acceso programático

Aidan Hogan

[email protected]

Page 2: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

ACCESO PROGRAMÁTICO (JAVA):JAVA DATABASE CONNECTIVITY (JDBC)

Capítulo 6 | Ramakrishnan / Gehrke

Page 3: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Java Database Connectivity (JDBC)

Externas

Page 4: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Veamos el ejemplo ApellidoApp.java

Page 5: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Consulta vs. Actualización

• Para hacer consultas (SELECT):

• Para hacer actualizaciones (INSERT; UPDATE, …)

Page 6: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Un problema …

¿Hay algún problema aquí? … no hemos “verificado” el input.

Page 7: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Inyección SQL

• Un usuario malintencionado puede ingresar un stringde entrada para hacer algo inesperado

Page 8: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Inyección SQL (muchas formas)

• Un usuario malintencionado puede ingresar un stringde entrada para hacer algo inesperado

¿Qué hace el ejemplo? ¡Devolverá toda la tabla!

Page 9: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Parece estúpido pero (por ejemplo) …

Page 10: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Más ejemplos …

https://en.wikipedia.org/wiki/SQL_injection

Page 11: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Más ejemplos …

https://en.wikipedia.org/wiki/SQL_injection

Page 12: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

El Jefe de HBGary …

Page 13: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Inyección SQL

¿Cómo podemos resolver el problema?

Page 14: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Inyección SQL: ¿escapar los strings?

Mejor, pero sería complicado implementar la función escapar en un lenguaje de programación general y garantizar que prevente cada tipo de inyección en cada versión (futura) de cada

sistema de BdD dado cualquier tipo de consulta y entrada!

Page 15: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Inyección SQL: ¡sentencias precompiladas!

Mandamos la consulta al sistema de bases de datos y después reemplazar los parámetros con la entrada del usuario

Page 16: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Inyección SQL: ¡sentencias precompiladas!

El sistema de base de datos

La consulta es compilada por el sistema sin la entrara

Page 17: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Inyección SQL: ¡sentencias precompiladas!

El sistema de base de datos

Se reemplaza el parámetro en la sentencia precompilada

(que es un plan en memoria, no un string)

Page 18: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Inyección SQL: ¡sentencias precompiladas!

El sistema de base de datos

Page 19: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Sentencias precompiladas

Se puede reutilizar el PreparedStatement varias veces

(es más eficiente también: se compila la sentenica sólo una vez

Se puede tener varios parámetros con varios tipos

Page 20: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Veamos el ejemplo ApellidoAppSegura.java

Page 21: CC3201-1 B DATOS O 2017 Clase 8: SQL (IV)aidanhogan.com/teaching/cc3201-1-2017/lectures/BdD2017-08.pdf · CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 8: SQL (IV) Acceso programático

Preguntas?