Seguridad de Bases de Datos
Table of Contents
Hoy en día, las bases de datos son componentes cardinales de
cualquier aplicación basada en web, permitiendo que los sitios web
provean contenido dinámico. Debido a que información
considerablemente sensible o secreta puede ser almacenada en una
base de datos, usted debe considerar seriamente la protección de
sus bases de datos.
Para recuperar o almacenar cualquier información necesita
conectarse a la base de datos, enviar una consulta válida, recoger
el resultado y cerrar la conexión. Hoy en día, el lenguaje de
consultas usado comúnmente en estas interacciones es el Lenguaje
de Consultas Estructurado (SQL por sus siglas en inglés). Puede
apreciar cómo un atacante puede intentar acometidas con
una consulta SQL.
Como puede suponer, PHP no puede proteger su base de datos por sí
solo. Las siguientes secciones están dirigidas a servir de
introducción a los conceptos básicos de cómo acceder y manipular
bases de datos desde scripts PHP.
Mantenga en mente esta simple regla: protección en
profundidad. Entre más acciones tome para incrementar la
protección de su base de datos, menor será la probabilidad de que
un atacante tenga éxito exponiendo o abusando de cualquier
información almacenada. Un buen diseño del esquema de la base de
datos y de la aplicación basta para lidiar con sus mayores
temores.
Diseño de Bases de Datos
El primer paso siempre es crear la base de datos, a menos que
desee usar una creada por alguien más. Cuando una base de datos
es creada, ésta es asignada a un dueño, quien ejecutó la
sentencia de creación. Usualmente, únicamente el dueño (o un
super-usuario) puede hacer cualquier cosa con los objetos de esa
base de datos, y para que otros usuarios puedan usarla, deben
otorgarse privilegios.
Las aplicaciones nunca deberían conectarse a la base de datos
bajo el usuario correspondiente a su dueño, o como un
super-usuario, ya que estos usuarios pueden, por ejemplo,
ejecutar cualquier consulta a su antojo, modificando el esquema
(p. ej. eliminando tablas) o borrando su contenido completo.
Usted puede crear diferentes usuarios de la base de datos para
cada aspecto de su aplicación con derechos muy limitados sobre
los objetos de la base de datos. Tan solo deben otorgarse los
privilegios estrictamente necesarios, y evitar que el mismo
usuario pueda interactuar con la base de datos en diferentes
casos de uso. Esto quiere decir que si un intruso gana acceso a
su base de datos usando las credenciales de sus aplicaciones, él
solo puede efectuar tantos cambios como su aplicación se lo
permita.
Es buena idea que no implemente toda la lógica del asunto en la
aplicación web (es decir, en su script); en su lugar, hágalo en
el esquema de la base de datos usando vistas, disparadores o
reglas. Si el sistema evoluciona, se espera que nuevos puertos
sean abiertos a la aplicación, y tendrá que re-implementar la
lógica para cada cliente de la base de datos. Por sobre todo,
los disparadores pueden ser usados para gestionar de forma
transparente todos los campos automáticamente, lo cual con
frecuencia provee información útil cuando se depuren problemas
de su aplicación, o se realicen rastreos sobre transacciones
particulares.