Segurança do servidor e do MySQL para aplicativos Java / JDBC?

5

Eu tenho um aplicativo java externo que usa o JDBC para acessar um banco de dados MySQL.

Isso será usado por muitas pessoas e armazenará todos os dados das pessoas no mesmo servidor / MySQL.

Como eu aposto que as pessoas serão capazes de decifrar o .jar e ver a fonte, espero que ele seja capaz de enganar o programa editando-o e fazendo com que ele obtenha informações de outros usuários mesmo quando eles não tiverem permissão para alcançar o dito informação.

Existe alguma maneira padrão de proteger um servidor para que as pessoas só possam acessar as informações às quais sua conta está conectada, mesmo que essas pessoas possam alterar a fonte?

Felicidades, Skarion

    
por Skarion 02.10.2010 / 21:30
fonte

2 respostas

3

Uma maneira de resolver o problema é usar um programa do lado do servidor para obter as informações para o cliente, em vez de fazer com que o cliente se conecte diretamente ao servidor. Isso pode ser na forma de uma página da Web, serviço ou RMI.

A vantagem disso é que o usuário nunca pode acessar o banco de dados diretamente (o que é um grande não) e, portanto, não pode obter acesso a outras informações ou escrever seus próprios dados.

A desvantagem é que é complicado e requer scripts externos. Você tem que descobrir como vai enviar informações entre o servidor e o cliente que não é baseado em SQL.

Claro que é a solução óbvia, mas nem sempre é a melhor. Depende completamente do seu aplicativo.

Como exemplo, em um dos meus aplicativos eu tinha um script PHP no lado do servidor que tomava vários parâmetros de modo e opção. Isso retornou todas as informações no formato JSON e foi analisado pelo aplicativo. Foi bem básico, mas funcionou para os meus propósitos.

Para autenticação quando o aplicativo foi iniciado pela primeira vez, ele solicitou ao script uma chave de sessão (para você, você pergunta ao script um nome de usuário e uma senha). A chave de sessão foi uma chave SHA512 muito longa, gerada aleatoriamente, que foi passada com todas as solicitações. Para você, se o usuário não tiver acesso a algo, retorne um erro.

Dependendo da sensibilidade das informações, você pode usar HTTPS, criptografia de texto, criptografia de URL etc.

    
por 02.10.2010 / 21:37
fonte
0

Você pode adicionar segurança no próprio servidor SQL, usando diferentes contas de usuário do banco de dados para cada usuário e manipulando a segurança usando recursos SQL; você pode impor restrições de segurança por meio de procedimentos armazenados, exibições de segurança, etc.

Isso pode não ser uma ótima ideia, no entanto. A segurança do SQL não é grande, o MySQL pode não implementar todos os recursos que você precisa para proteger seus dados com eficácia e pode envolver muito trabalho do seu lado.

A outra solução é adicionar um intermediário entre seu aplicativo e o banco de dados que está fora do controle dos usuários finais. Faça com que seu aplicativo se conecte a outro aplicativo, autentique-se e faça com que o segundo aplicativo reforce a segurança. Esta aplicação pode ser um webapp que expõe os métodos necessários via serviços web / RPC / REST, qualquer que seja.

    
por 27.01.2013 / 20:32
fonte

Tags