/ / Prevenindo o acesso a dados JSON em um aplicativo Angular - json, angularjs, security

Evitando o acesso a dados JSON em um aplicativo Angular - json, angularjs, security

Eu tenho um (Balãobackend alimentando uma API que serve JSON para um Angular aplicativo.

Eu amo o fato de que meu backend (algoritmos,banco de dados) é totalmente desconectado do meu frontend (design, UI), pois poderia literalmente executar a partir de dois servidores distintos. No entanto, como a exibição é totalmente gerada pelo cliente, todos podem acessar o JSON dados obviamente. Digamos que o aplicativo seja uma lista simples de coisas (as coisas são armazenadas em um arquivo JSON).

A fim de impedir o acesso direto ao meu banco de dados JSON no console do navegador, encontrei estas opções:

  • Criptografar os dados (fraco, já que a função de descriptografia será livremente visível no javascript, mas não é tão fácil ao lidar com arquivos minificados)
  • Ao invés de $http.get todo o banco de dados, em seguida, filtrando com angular, $http.get muitas vezes (como o usuário está rolando uma lista, por exemplo), de modo que é mais difícil rastrear programaticamente

Eu acredito que minhas opções ainda são fracas. Como eu poderia tornar mais difícil para um hacker rastrear todo o banco de dados? Alguma ideia ?

Respostas:

4 para resposta № 1

Pelo que entendi esta pergunta - o usuário deveser permitido acessar todos os dados por meio de sua interface do usuário, mas você não deseja que eles acessem a API diretamente. Como você descobriu, todos os dados acessados ​​pelo cliente não podem ser protegidos, mas podemos tornar o acesso um pouco mais do PITA.

Uma maneira comum de fazer isso é verificar o Referenciador HTTP. Quando você faz uma chamada da interface do usuário, o servidorserá dada a página da qual o pedido está vindo. Isso geralmente é usado para impedir que pessoas criem mashups que usam seus dados sem permissão. Como com todos os cabeçalhos de solicitação HTTP, você está confiando no chamador para ser verdadeiro. Isso não irá protegê-lo contra hackers ou alguém que esteja escrevendo um scraper em algum outro idioma. @Vejo CSRF

Outra ideia é incorporar um token variável noFonte html que inicializa seu aplicativo. Você pode especificar isso como uma constante angular ou uma variável global e incluí-la em todas as suas solicitações $ http. O token em si pode ser exclusivo para cada sessão ou ser uma data de expiração criptografada que somente o servidor pode processar. No entanto, este método é falho, assim como alguém poderia analisar a fonte html, obter o código e fazer uma solicitação.

Então, na verdade, você pode dificultar para alguém, mas dificilmente é infalível.

Se os usuários puderem acessar apenas alguns dos dados, você poderá tentar algo como o Firebase. Ele permite que você defina regras para quem pode acessar o que.


1 para resposta № 2

Considerações de segurança Ao projetar aplicativos da Web, considere ameaças de segurança de:

Vulnerabilidade JSON XSRF Ambos servidor e ocliente deve cooperar em para eliminar essas ameaças. Angular vem pré-configurado com estratégias que abordam esses problemas, mas para isso trabalhar back-end a cooperação do servidor é necessária.

Proteção de vulnerabilidade JSON A JSONvulnerabilidade permite que terceiros website para transformar sua URL de recurso JSON em solicitação JSONP sob alguns condições. Para combater isso, seu servidor pode prefixar todas as solicitações JSON com a seguinte string ")]}", n ". O Angular removerá automaticamente prefixo antes de processá-lo como JSON.

Por exemplo, se o seu servidor precisar retornar:

["one", "two"] que é vulnerável a ataques, seu servidor pode retornar:

)]} ", [" one "," two "] Angular removerá o prefixo antes do processamento o JSON.

Proteção XSRF de Falsificação de Solicitação de Site Cruzado (XSRF)é uma técnica de que um site não autorizado pode obter dados privados do seu usuário. Angular fornece um mecanismo para combater XSRF. Ao executar solicitações XHR, o serviço $ http lê um token de um cookie (por padrão, XSRF-TOKEN) e define como um cabeçalho HTTP (X-XSRF-TOKEN). Desde apenas JavaScript que é executado em seu domínio pode ler o cookie, seu servidor pode ser garantiu que o XHR veio do JavaScript em execução no seu domínio. o o cabeçalho não será definido para solicitações entre domínios.

Para aproveitar isso, seu servidor precisadefinir um token em um Cookie de sessão legível por JavaScript chamado XSRF-TOKEN no primeiro HTTP Solicitação GET. Em pedidos XHR subseqüentes, o servidor pode verificar se o cookie corresponde ao cabeçalho HTTP X-XSRF-TOKEN e, portanto, certifique-se de que Somente JavaScript em execução no seu domínio poderia ter enviado a solicitação. O token deve ser exclusivo para cada usuário e deve ser verificável pelo servidor (para evitar que o JavaScript crie seus próprios tokens). Nós recomendamos que o token seja um resumo da autenticação do seu site cookie com um sal para maior segurança.

O nome dos cabeçalhos pode ser especificado usandoo xsrfHeaderName e Propriedades xsrfCookieName de $ httpProvider.defaults em config-time, $ http.defaults em tempo de execução ou a configuração por solicitação objeto.

Por favor, por favor consulte o link abaixo,

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


0 para resposta № 3

De AngularJS DOCs

Proteção de vulnerabilidade JSON Uma vulnerabilidade JSON permite que o site de terceiros transforme sua URL de recurso JSON em solicitação JSONP sob algumas condições. Para combater isso, seu servidor pode prefixar todas as solicitações JSON com a sequência a seguir ")]}",n". O Angular removerá automaticamente o prefixo antes de processá-lo como JSON.

Existem outras técnicas, como proteção XSRF e Transformações, que adicionarão ainda mais segurança às suas comunicações JSON. mais sobre isso pode ser encontrado no AngularJS Docs https://docs.angularjs.org/api/ng/service/$http


0 para a resposta № 4

Você pode querer considerar o uso de tokens da Web JSONpor esta. Eu não tenho certeza de como implementar isso no Flask, mas aqui está um exemplo decente de como isso pode ser feito com um backend do Nodejs. Este exemplo, pelo menos, mostra como você pode implementá-lo no Angularjs.

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

Atualização: JWT for Flask:

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