¿Es seguro ejecutar consultas MySQL en un dispositivo cliente?

1

Estoy creando un proyecto que requiere que los usuarios estén autenticados para acceder a él. Estaba planeando usar MySQL como base de datos y ejecutar scripts PHP en el cliente para obtener datos de los usuarios. P.ej. SELECCIONA * de uaccounts WHERE username = 'bob'. Y luego almacenar el resto de la información si el usuario se autentica en una sesión. ¿Es seguro ejecutar consultas de SQL en un cliente o debo buscar algo como Firebase o crear una API o buscar en otra API externa para almacenar y consultar datos de usuarios (y otras consultas de SQL)? ¿Se está ejecutando SQL en el cliente abierto a la interceptación por parte de los atacantes o es seguro siempre que se haga correctamente?

    
pregunta Oliver Leach 17.11.2017 - 21:02
fuente

2 respuestas

1
  

SELECCIONA * de uaccounts WHERE username = 'bob

Suponiendo que se supone que Bob solo ve el registro de Bob, entonces no es seguro. Bob puede extraer los parámetros de conexión de la aplicación y ejecutar cualquier consulta que desee.

La seguridad de la base de datos está en todas las implementaciones que he visto a nivel de tabla. Es decir, incluso si le da a Bob su propia cuenta de usuario para la base de datos, todavía necesitará un permiso de selección en la tabla uaccounts, lo que significa que puede ejecutar "SELECT * FROM uaccounts".

La única forma de hacer esto seguro es, en lugar de otorgar a Bob el permiso de selección en la tabla, crear procedimientos almacenados sin parámetros (para los cuales Bob necesitaría permisos de ejecución) que usan el nombre de usuario registrado. Y esto suele ser mucho más esfuerzo de lo que vale y demasiado fácil de arruinar. Sin mencionar que realmente no escala. Facebook no querría un nombre de usuario de base de datos por separado para cada usuario del sitio ...

    
respondido por el Hector 18.11.2017 - 01:31
fuente
0

Sin entrar en una discusión complicada de cómo funciona la autenticación mysql y el intercambio de datos, es seguro siempre que se realice correctamente. Y hacerlo correctamente significa usar una conexión ssl. MySql admite esto de forma inmediata

Sin embargo, la seguridad también puede significar limitar la cantidad de daños que los clientes pueden hacer al servidor. Puede hacer esto en una conexión mysql sin formato negando el acceso a las tablas para la cuenta de usuario y permitiendo las operaciones mediante procedimientos almacenados con separación de privilegios. Alternativamente, use https como el transporte con un servidor de descanso simple delante de los dbms.

    
respondido por el symcbean 17.11.2017 - 22:51
fuente

Lea otras preguntas en las etiquetas