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.
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 éstos 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.