La forma más segura de acceder a los datos desde un servidor SQL

0

Soy parte de un grupo que desarrolla una aplicación iOS. Esta aplicación accede a una base de datos para recuperar y enviar datos. Uno de los miembros del grupo dijo que no quiere tener ninguna interacción directa con la base de datos desde la aplicación, sino que los datos pasen por un archivo .php en un sitio web.

Su razón para tener una página php intermedia es que no quiere la contraseña de la base de datos en el código porque alguien podría descompilar la aplicación y mirar la contraseña.

Friend's idea:
App -> website (.php) -> database -> website -> app
As opposed to:
App -> database -> app

¿Es esta una preocupación legítima? Si es así, ¿es efectiva la solución php de este miembro del grupo?

¡Muchas gracias de antemano!

    
pregunta 08.02.2016 - 14:09
fuente

2 respuestas

5

Tu pregunta es muy confusa. Asumiré que el inglés no es su primer idioma y lo que realmente pregunta es "¿se debe exponer un DBMS en Internet?"

  

él no quiere la contraseña de la base de datos en el código

Eso es solo el comienzo de tus problemas.

Hay cosas que puede hacer para hacer que el problema sea menos grave de lo que está proponiendo actualmente, pero aún así dejan mucho que desear.

Utilice las credenciales proporcionadas por el usuario para autenticarse en el DBMS

es decir, la contraseña de la base de datos es la contraseña del usuario. Esto restringe el uso de la base de datos a usuarios conocidos (en lugar de hacerlo disponible para cualquier persona en Internet) y elimina la necesidad de incrustar la contraseña de la base de datos en el cliente. Pero no resuelve ninguno de los otros problemas.

restringe el acceso a las cuentas para ejecutar solo procedimientos almacenados

Hecho correctamente, esto evitaría que un atacante lea cosas de la base de datos a la que no debería tener acceso, por ejemplo. solo deben poder ver sus pedidos y no los pedidos de otras personas. También le permite implementar su lógica de negocios en el lado del servidor (no puede confiar en la lógica implementada en el cliente). Nunca debe almacenar datos que no hayan sido examinados para su cumplimiento. Esto también ofrece cierto margen para administrar la experiencia del usuario de manera más eficaz cuando las cosas no avanzan por el camino feliz. Sin embargo, es realmente difícil implementar la lógica de la aplicación en el SQL de procedimiento.

restringe el acceso a direcciones IP específicas

Cuando solo las direcciones IP conocidas accederán a un servicio, esta es una buena práctica: reduce el ruido, pero no es infalible. Y su mención de una aplicación IOS (supongo que se refiere a iOS, el sistema operativo de dispositivo móvil de Apple, no IOS, que es el sistema operativo de dispositivo de red de Cisco) sugiere que no podrá determinar la dirección del cliente por adelantado.

... ¡¡¡pero esto no es suficiente protección !!!

Los DBMS simplemente no están diseñados para exponerse en un entorno potencialmente hostil. Y el SQL, que utiliza el mismo canal para datos y control, es particularmente susceptible de abuso. Nadie ha podido solucionar estos problemas en un DBMS, y de hecho, ya nadie lo está intentando, ya que la solución es implementar una capa de control adecuada, al lado del servidor, encima del DBMS.

    
respondido por el symcbean 08.02.2016 - 15:16
fuente
1

¡¡PIENSO EN QUE ESTÁ SENTIRSE TRATAR ESTO !!

Es realmente confuso, pero el uso de la solución ajax cumpliría con sus requisitos.

  1. escriba códigos javascript y luego guárdelos como archivo .js . en el documento ... escriba el método "GET" / "POST" con contraseña y nombre de usuario que conectará la aplicación con el servidor o con el archivo .php ... que mantendrá la conexión activa al servidor! por ejemplo:
    "function obtieneData (fuente de datos) {if (window.XMLHttpRequestObject) {XMLHttpRequestObject.open (" GET ", fuente de datos, nombre de usuario, contraseña);} ...}"
  2. y luego use la función eval() para permitir la evaluación del javascript y / o php durante onreadystatechange, readystate == 4 & & status == 200; ....
este archivo se guardará como un documento javascript externo que se incluirá usando "<" script src="doc.js". . . ">" ¡lo que resultará en que cuando se vea el documento, la contraseña que contiene el código fuente se verá como .js y no como la única! ¡PIENSO QUE LA CONTRASEÑA Y OTRA INFORMACIÓN NO SERÁN PRONUNCIARIAS A LAS MALPRÁCTICAS, COMO SE REALIZARÁ EN EL AJAX DE .JS!     
respondido por el amin martola 17.07.2017 - 14:16
fuente

Lea otras preguntas en las etiquetas