/ / Prevención del acceso a datos JSON en una aplicación angular: json, angularjs, seguridad

Prevención del acceso a los datos JSON en una aplicación angular: json, angularjs, seguridad

Conseguí una (Matraz) backend alimentando una API que sirve JSON a una Angular la aplicación

Me encanta el hecho de que mi backend (algoritmos,base de datos) está totalmente desconectado de mi interfaz (diseño, interfaz de usuario) ya que literalmente podría ejecutarse desde dos servidores distintos. Sin embargo, dado que la vista se genera por completo del lado del cliente, todos pueden acceder a JSON datos obviamente. Digamos que la aplicación es una lista simple de cosas (las cosas se almacenan en un archivo JSON).

Para evitar el acceso directo a mi base de datos a través de JSON En la consola del navegador encontré estas opciones:

  • Cifrar los datos (débil ya que la función de descifrado será visible libremente en JavaScript, pero no es tan fácil cuando se trata de archivos minificados)
  • En lugar de $http.get toda la base de datos luego se filtra con angular, $http.get muchas veces (a medida que el usuario se desplaza por una lista, por ejemplo) para que sea más difícil de rastrear mediante programación

Creo que mis opciones aún son débiles. ¿Cómo podría dificultar que un hacker rastree toda la base de datos? Algunas ideas ?

Respuestas

4 para la respuesta № 1

Según tengo entendido esta pregunta, el usuario deberíase le permitirá acceder a todos los datos a través de su interfaz de usuario, pero no desea que accedan a la API directamente. Como ha descubierto, los datos a los que accede el cliente no se pueden proteger, pero podemos hacer que acceder a ella sea un poco más de PITA.

Una forma común de hacer esto es verificar el Referencia HTTP. Cuando realiza una llamada desde la interfaz de usuario, el servidorse le dará la página de donde proviene la solicitud. Esto generalmente se usa para evitar que las personas creen mashups que usan sus datos sin permiso. Al igual que con todos los encabezados de solicitud HTTP, confía en que la persona que llama sea sincera. Esto no lo protegerá de la piratería de la consola o de alguien que escriba un raspador en otro idioma. @ver CSRF

Otra idea es incrustar un token variable en elfuente html que inicia tu aplicación. Puede especificar esto como una constante angular o una variable global e incluirlo en todas sus solicitudes $ http. El token en sí podría ser único para cada sesión o ser una fecha de vencimiento cifrada que solo el servidor puede procesar. Sin embargo, este método es defectuoso y alguien podría analizar la fuente html, obtener el código y luego realizar una solicitud.

Entonces, realmente, puedes hacerlo más difícil para alguien, pero no es infalible.

Si los usuarios solo deben poder acceder a algunos de los datos, puede probar algo como firebase. Le permite definir reglas para quién puede acceder a qué.


1 para la respuesta № 2

Consideraciones de seguridad Al diseñar aplicaciones web, tenga en cuenta amenazas de seguridad de:

Vulnerabilidad JSON XSRF Tanto el servidor como elel cliente debe cooperar en para eliminar estas amenazas. Angular viene preconfigurado con estrategias que abordan estos problemas, pero para que esto funcione backend Se requiere la cooperación del servidor.

Protección de vulnerabilidad JSON A JSONvulnerabilidad permite a terceros sitio web para convertir su URL de recurso JSON en solicitud JSONP bajo alguna condiciones Para contrarrestar esto, su servidor puede prefijar todas las solicitudes JSON con la siguiente cadena ")]}", n ". Angular eliminará automáticamente prefijo antes de procesarlo como JSON.

Por ejemplo, si su servidor necesita regresar:

["uno", "dos"] que es vulnerable a ataques, su servidor puede devolver:

)]} ", [" uno "," dos "] Angular eliminará el prefijo, antes de procesar el JSON

Cross Site Request Forgery (XSRF) Protección XSRFes una técnica de que un sitio no autorizado puede obtener los datos privados de su usuario. Angular proporciona un mecanismo para contrarrestar XSRF. Al realizar solicitudes XHR, el servicio $ http lee un token de una cookie (por defecto, XSRF-TOKEN) y lo establece como un encabezado HTTP (X-XSRF-TOKEN). Ya que solo JavaScript que se ejecuta en su dominio podría leer la cookie, su servidor puede ser aseguró que el XHR vino de JavaScript que se ejecuta en su dominio. los el encabezado no se establecerá para solicitudes de dominio cruzado.

Para aprovechar esto, su servidor necesitaestablecer una ficha en un Cookie de sesión legible de JavaScript llamada XSRF-TOKEN en el primer HTTP OBTENER solicitud. En solicitudes XHR posteriores, el servidor puede verificar que el la cookie coincide con el encabezado HTTP X-XSRF-TOKEN y, por lo tanto, asegúrese de que solo JavaScript que se ejecuta en su dominio podría haber enviado la solicitud. El token debe ser único para cada usuario y debe ser verificable por el servidor (para evitar que JavaScript cree sus propios tokens). Nosotros recomienda que el token sea un resumen de la autenticación de su sitio galleta con sal para mayor seguridad.

El nombre de los encabezados se puede especificar usandoel xsrfHeaderName y Propiedades de xsrfCookieName de $ httpProvider.defaults en config-time, $ http.defaults en tiempo de ejecución, o la configuración por solicitud objeto.

Por favor, consulte el siguiente enlace,

https://docs.angularjs.org/api/ng/service/$ http


0 para la respuesta № 3

De AngularJS DOCs

Protección de vulnerabilidad JSON Una vulnerabilidad JSON permite que un sitio web de terceros convierta su URL de recurso JSON en una solicitud JSONP bajo ciertas condiciones. Para contrarrestar esto, su servidor puede prefijar todas las solicitudes JSON con la siguiente cadena ")]}",n". Angular eliminará automáticamente el prefijo antes de procesarlo como JSON.

Existen otras técnicas como la protección XSRF y las transformaciones que agregarán aún más seguridad a sus comunicaciones JSON. se puede encontrar más información sobre esto en AngularJS Docs https://docs.angularjs.org/api/ng/service/$http


0 para la respuesta № 4

Es posible que desee considerar el uso de tokens web JSONpara esto. No estoy seguro de cómo implementar esto en Flask, pero aquí hay un ejemplo decente de cómo se puede hacer con un backend de Nodejs. Este ejemplo al menos muestra cómo puede implementarlo en Angularjs.

http://www.kdelemme.com/2014/03/09/authentication-with-angularjs-and-a-node-js-rest-api/

Actualización: JWT para Flask:

https://github.com/mattupstate/flask-jwt