/ / Empêcher l'accès aux données JSON dans une application Angular - json, angularjs, security

Empêcher l'accès aux données JSON dans une application Angular - json, angularjs, security

J'ai un (Ballon) backend alimentant une API qui sert JSON à un Angulaire app.

J'adore le fait que mon backend (algorithmes,base de données) est totalement déconnecté de mon frontend (design, UI) car il pourrait littéralement fonctionner à partir de deux serveurs distincts. Cependant, comme la vue est entièrement générée côté client, tout le monde peut accéder au JSON les données évidemment. Supposons que l'application soit une simple liste de choses (les choses sont stockées dans un fichier JSON).

Afin d'empêcher l'accès direct à ma base de données via JSON dans la console du navigateur, j'ai trouvé ces options:

  • Cryptage des données (faible car la fonction de décryptage sera librement visible dans le javascript, mais pas si facile lorsqu'il s'agit de fichiers minifiés)
  • Au lieu de $http.get l'ensemble de la base de données puis filtrage angulaire, $http.get plusieurs fois (comme l'utilisateur fait défiler une liste par exemple) de sorte qu'il est plus difficile à analyser par programme

Je crois que mes options sont encore faibles. Comment pourrais-je rendre plus difficile pour un pirate de parcourir toute la base de données? Des idées ?

Réponses:

4 pour la réponse № 1

Si je comprends bien cette question - l'utilisateur doitêtre autorisé à accéder à toutes les données via votre interface utilisateur, mais vous ne voulez pas qu'ils accèdent directement à l'API. Comme vous l'avez compris, aucune donnée accessible par le client ne peut être sécurisée mais nous pouvons rendre l'accès un peu plus à PITA.

Une façon courante de procéder consiste à vérifier Référent HTTP. Lorsque vous effectuez un appel à partir de l'interface utilisateur, le serveurrecevra la page d'où provient la demande. Ceci est généralement utilisé pour empêcher les personnes de créer des mashups qui utilisent vos données sans autorisation. Comme pour tous les en-têtes de requête HTTP, vous comptez sur l'appelant pour être honnête. Cela ne vous protégera pas du piratage de la console ou de quelqu'un qui écrit un grattoir dans une autre langue. @voir CSRF

Une autre idée consiste à incorporer un jeton variable dans lesource html qui démarre votre application. Vous pouvez spécifier cela comme une constante angulaire ou une variable globale et l'inclure dans toutes vos requêtes $ http. Le jeton lui-même peut être unique pour chaque session ou être une date d'expiration chiffrée que seul le serveur peut traiter. Cependant, cette méthode est imparfaite et quelqu'un pourrait analyser la source html, obtenir le code, puis faire une demande.

Donc, vraiment, vous pouvez le rendre plus difficile pour quelqu'un, mais ce n'est pas infaillible.

Si les utilisateurs ne peuvent accéder qu'à certaines données, vous pouvez essayer quelque chose comme Firebase. Il vous permet de définir des règles pour qui peut accéder à quoi.


1 pour la réponse № 2

Considérations de sécurité Lors de la conception d'applications Web, tenez compte de menaces de sécurité:

Vulnérabilité JSON XSRF Le serveur et lele client doit coopérer afin d'éliminer ces menaces. Angular est pré-configuré avec stratégies qui répondent à ces questions, mais pour que cela fonctionne en arrière-plan la coopération du serveur est requise.

Protection contre les vulnérabilités JSON A JSONune vulnérabilité permet à un tiers site Web pour transformer votre URL de ressource JSON en demande JSONP sous certains conditions. Pour contrer cela, votre serveur peut préfixer toutes les requêtes JSON avec la chaîne suivante ")]}", n ". Angular supprimera automatiquement préfixe avant de le traiter en JSON.

Par exemple, si votre serveur doit retourner:

["un", "deux"] qui est vulnérable aux attaques, votre serveur peut renvoyer:

)]} ", [" un "," deux "] Angular supprimera le préfixe, avant le traitement le JSON.

Protection XSRF (Cross Site Request Forgery)est une technique de qu'un site non autorisé peut obtenir les données privées de votre utilisateur. Angular fournit un mécanisme pour contrer XSRF. Lors de l'exécution de requêtes XHR, le service $ http lit un jeton à partir d'un cookie (par défaut, XSRF-TOKEN) et le définit comme un en-tête HTTP (X-XSRF-TOKEN). Depuis seulement JavaScript qui s'exécute sur votre domaine pourrait lire le cookie, votre serveur peut être assuré que le XHR provenait de JavaScript exécuté sur votre domaine. le l'en-tête ne sera pas défini pour les demandes interdomaines.

Pour en profiter, votre serveur doitdéfinir un jeton dans un Cookie de session lisible par JavaScript appelé XSRF-TOKEN sur le premier HTTP OBTENIR la demande. Lors des demandes XHR suivantes, le serveur peut vérifier que le cookie correspond à l'en-tête HTTP X-XSRF-TOKEN, et assurez-vous donc que seul JavaScript exécuté sur votre domaine aurait pu envoyer la demande. Le jeton doit être unique pour chaque utilisateur et doit être vérifiable par le serveur (pour empêcher le JavaScript de créer ses propres jetons). nous recommander que le jeton soit un condensé de l'authentification de votre site cookie avec un sel pour plus de sécurité.

Le nom des en-têtes peut être spécifié à l'aide dele xsrfHeaderName et Propriétés xsrfCookieName de $ httpProvider.defaults à config-time, $ http.defaults au moment de l'exécution ou la configuration par demande objet.

Veuillez vous référer au lien ci-dessous,

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


0 pour la réponse № 3

Depuis les DOC AngularJS

Protection contre les vulnérabilités JSON Une vulnérabilité JSON permet à un site Web tiers de transformer votre URL de ressource JSON en demande JSONP sous certaines conditions. Pour contrer cela, votre serveur peut préfixer toutes les requêtes JSON avec la chaîne suivante ")]}",n". Angular supprimera automatiquement le préfixe avant de le traiter en JSON.

Il existe d'autres techniques telles que la protection XSRF et les transformations qui ajouteront davantage de sécurité à vos communications JSON. plus à ce sujet peut être trouvé dans AngularJS Docs https://docs.angularjs.org/api/ng/service/$http


0 pour la réponse № 4

Vous pouvez envisager d'utiliser des jetons Web JSONpour ça. Je ne sais pas comment implémenter cela dans Flask mais voici un exemple décent de la façon dont cela peut être fait avec un backend Nodejs. Cet exemple montre au moins comment vous pouvez l'implémenter dans Angularjs.

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

Mise à jour: JWT pour Flask:

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