Pergunta

Estou desenvolvendo um aplicativo ASP.NET que interface com o Google Maps e recupera informações de marcadores de um banco de dados. As informações do marcador são divididas em tabelas no banco de dados, onde o nome da tabela reflete uma empresa (por exemplo, Companya_markerdata, Companyb_markerdata etc). Para atualizar periodicamente o mapa com os novos dados do marcador, uso o setTimeout no JavaScript para chamar regularmente a função JavaScript 'Updatatemarkers'. 'UpdateMarkers' faz uma chamada para um serviço da Web que executa a consulta do banco de dados e retorna uma lista de marcadores de volta ao JavaScript, que por sua vez atualiza o mapa.

O principal problema que tenho com esse método é que meu serviço da Web exige que eu passe o nome da empresa para que saiba qual tabela no banco de dados acessar. Como você pode imaginar, isso representa um risco de segurança, pois qualquer um pode passar um nome diferente da empresa para o serviço da Web e poder recuperar os dados de outras empresas e também para os seus.

Para evitar esse problema, estou reestruturando meu programa da seguinte forma: Quando o administrador do sistema cria usuários para o meu aplicativo, eles também podem atribuir um ID da empresa a esse usuário. O ID da empresa é armazenado usando o objeto de perfil no ASP.NET. Estou movendo o código do serviço da Web para uma classe com funções compartilhadas para que elas possam ser chamadas apenas nas minhas páginas (mas não por ninguém, como nos Serviços da Web). As funções ainda exigirão que um nome de empresa tenha passado para eles. No entanto, em vez do JavaScript fazendo chamadas diretas para essas funções compartilhadas, o JavaScript chamará um conjunto de métodos de página (que, como eu o entendo, não são públicos como os serviços da Web). Esses métodos de página usarão o objeto de perfil para recuperar o nome da empresa anexado ao usuário atualmente conectado e, em seguida, fará uma chamada para minhas funções compartilhadas de banco de dados e retornará as informações de volta ao JavaScript.

Eu acho que esse segundo método é mais seguro do que o primeiro, porque não permito que o cliente passe opções diferentes para o meu código e recupere dados não autorizados. O código do lado do servidor funciona os parâmetros que precisam ser enviados. No entanto, estou me perguntando se existe uma maneira melhor de fazer isso que estou perdendo?

Obrigado

--Amr

Foi útil?

Solução

Tudo o que você precisa é de um método de verificar se o usuário pode acessar os dados dessa empresa.

Presumo que você esteja usando o Ajax, já que você diz que está recuperando informações do seu próprio banco de dados com o JavaScript. Portanto, o script/programa do lado do servidor que você ligar, coloque o código de autenticação do usuário lá.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top