DUVIDAS SOBRE SEGURANCA EM SISTEMA/BANCO DE DADOS

SPYDREX 17/09/2010 12:00:43
#353217
Ola a todos.

Estou aprendendo a programar em VB .NET e gostaria de saber a opinião de vocês e a ajuda sobre o seguinte:

A muito tempo venho analizando vários exemplos de desenvolvimento de sites, sistemas e banco de dados. Minha grande preocupação hoje é com a segurança de sistemas que passarei a desenvolver.

Acredito seriamente que é uma falta muito grande no desenvolvimento de sistema termos que enviar na string de conexão com o banco de dados o nome do usuário e a senha programadas dentro do programa.

Digo isso porquê não adianta nada se preocupar neste tipo de segurança, porquê se um usuário mais [Ô]avançadinho[Ô] quiser, ele pode facilmente recuperar estes dados utilizando algum tipo de descompilador e obter acesso a nome do usuário e senha de acesso a partir do fonte descompilado.

Ora de posse de tais informações o cara poderia fazer o maior estrago no banco de dados já que muitas vezes o usuário e senha passados para o banco tem direitos a SELECT/INSERT/UPDATE/DELETE em qualquer tabela do banco de dados e é ai que mora o perigo, e olha que a preocupação é com um simples usuário e não um hacker.

Pensando nisso estou determinado em fazer os meus sistemas usando a seguinte abordagem:

Peço ao usuário o nome e a senha via formulário, como se faz naturalmente em qualquer sistema, em vez de ter a string codificada dentro do sistema com usuário e senha, eu montarei parte da string de conexão com os dados necessário para conexão com o BD mas o par usuário/senha eu adicionarei logo após clique no botão de login.

Isso resolve o problema do [Ô]malandrinho[Ô] que quiser descobrir o acesso via código, porém ainda existem um inconveniente, pois se a estação tiver algum tipo de keylogger instalado a coisa pode ficar complicada, mas os dados serão menores, pois podemos limitar o acesso do usuário no banco usando as técnicas tradicionais, mas a vantagem é que terei controle dos usuários conectados individualmente e não de apenas um usuário usando um monte de conexões simultâneas como acontece nos modelos tradicionais.

Porém eu precisaria de algo mais genérico, pois estou pensado em fazer esses controles com banco de dados distintos, e é ai que entra a dificuldade, pois cada BD, possui o seu modo de tratar essas informações.

Alguém tem alguma idéia para resolver esse impasse.

Grato a todos.
FOXMAN 17/09/2010 20:50:34
#353266
Resposta escolhida
E ae blza....

Tipo , vc acha que criptografando a senha e usuario na string não serviria ????, além disso utilizar um teclado virtual ajuda(eu disse ajuda, não resolve definitivamente) a resolver a questão do keylogger.....!! vc não acha ?


LUIS.HERRERA 17/09/2010 21:06:00
#353270
Bem eu estou a muito tempo preocupado com a vulnerabilidade total do código Net e agora você lembrou bem deste novo detalhe.

O problema desta sua técnica é que a senha e usuário do banco seriam conhecidas dos usuários. Isso para um sistema comercial com vários clientes é um problema, a menos que você realmente faça o cliente (TI) criar o banco via script e definir os usuários e senhas do banco, assim tudo bem.

O Foxman deu uma boa idéia com a criptografia do código, caso você distribua o banco pronto ao cliente com os próprios usuários e senhas suas. O problema neste caso é que se a rotina de criptografia está embutida no próprio código, também não adiantaria muita coisa, pois bastaria pegar a string criptografada e aplicar na função de descriptografar, já que se pode decompilar o [Ô]maldito[Ô] MSIL.

Uma solução seria incluir a rotina de cripto e decripto em uma DLL a parte, só que teria de ser feita em outra plataforma não Net, o que acho inviabilizaria o sistema ou compicaria muito sua manutenção. Agora se usar uma outra linguagem não Net para criar esse DLL, porque então já não programar tudo nela?

A cada dia eu acho mai inviável esse Net. Comprei o VB 2008, mas não estou com nenhuma vontade de refazer todo meu sistema nele. Já que terei de aprender um monte de coisas novas, talvez o ideal fosse mesmo abandonar o VB e tentar descobrir uma outra plataforma não Net., mas qual seria uma boa opção? Eis a questão.
LEVII 20/09/2010 13:26:02
#353416
Boa tarde a todos.

Uqnaot a segurança dos dados, existem mutias maneiras de isso ser controlado.

Por exemplo, para encriptar as dlls existem um cara chamado DotFuscator.

Eu costumo usar uma solução de criptografia onde minha string de conexao vem toda criptografada, para transporte uso SSL, teve um caso de uma solução onde tudo que era gravado no banco era criptografado com criptografia 256 bits.

também no caso do banco, eu uso um usuário que somente tem acesso de execução de procs, view e triggers, e executa select,update e delete e insert...o cara nao consegue editar proc, view.

somente visualiza os dados.

no servidor de banco de dados possuo um serviço WCF que recebe o nome da proc, os parametros.
ele executa a proc e manda um datatatable serializavel, e criptografado para o solicitante, ele decritpografa e transforma o datatable em entidades customizadas


ai vai do arquiteto e tambem da real necessidade d segurança...

este problema não e so .Net, é de todas, porém fica mais explicito em .Net por que tem muito [Ô]programador[Ô] por ai, que leu um livro e acha qe manja, então isso pode complicar...

mas existem muitas formas de prever segurança dos dados
SPYDREX 20/09/2010 17:00:56
#353442
Citação:

:
E ae blza....

Tipo , vc acha que criptografando a senha e usuario na string não serviria ????, além disso utilizar um teclado virtual ajuda(eu disse ajuda, não resolve definitivamente) a resolver a questão do keylogger.....!! vc não acha ?




Então FOXMAN o que imagino é o seguinte:

A minha idéia é ter os usuários todos autenticado no BD, porquê imagina isso:

Você tem 1000 conexões ao oriundas de origen desconhecida, mesmo nome de usuário, porquê da maneira tradicional nós enviamos usr/passwd via string desta forma.

Imagina que você quer saber alguma coisa específica da conexão tipo, quantos MB de dados tal usuário está processando, quais tabelas ele está abrindo etc...

Da forma tradicional é impossível você obter essas informações, separadas por usuário já que haverá apenas um login unico no BD com um monte de instâncias.

Você não acha que seria mais fácil para administrar os usuários se eles fizerem logis individualmente ?
Não ficaria mais fácil obter estatísticas de acesso ao BD de uma forma mais natural ?

é importante ter a criptografia, mas o usuário ainda teria que fazer login individualmente.

Para a criação de logins adicionais com senhas criptografadas, seria mais fácil desenvover outro aplicativo que faria somente isso, mas estas informações ainda ficariam todas dentro do BD, nada dentro de programas, nem em arquivos .XML.

Na minha opinião, se existe uma opção dentro dos BDs para gravar as informações do usuário de forma individual, ela tem que ser usada, senão é uma incoerência ter esses recursos disponíveis e não utilizá-los da forma correta.

é isso.
SPYDREX 20/09/2010 17:16:30
#353444
Citação:

:
Bem eu estou a muito tempo preocupado com a vulnerabilidade total do código Net e agora você lembrou bem deste novo detalhe.

O problema desta sua técnica é que a senha e usuário do banco seriam conhecidas dos usuários. Isso para um sistema comercial com vários clientes é um problema, a menos que você realmente faça o cliente (TI) criar o banco via script e definir os usuários e senhas do banco, assim tudo bem.

O Foxman deu uma boa idéia com a criptografia do código, caso você distribua o banco pronto ao cliente com os próprios usuários e senhas suas. O problema neste caso é que se a rotina de criptografia está embutida no próprio código, também não adiantaria muita coisa, pois bastaria pegar a string criptografada e aplicar na função de descriptografar, já que se pode decompilar o [Ô]maldito[Ô] MSIL.

Uma solução seria incluir a rotina de cripto e decripto em uma DLL a parte, só que teria de ser feita em outra plataforma não Net, o que acho inviabilizaria o sistema ou compicaria muito sua manutenção. Agora se usar uma outra linguagem não Net para criar esse DLL, porque então já não programar tudo nela?

A cada dia eu acho mai inviável esse Net. Comprei o VB 2008, mas não estou com nenhuma vontade de refazer todo meu sistema nele. Já que terei de aprender um monte de coisas novas, talvez o ideal fosse mesmo abandonar o VB e tentar descobrir uma outra plataforma não Net., mas qual seria uma boa opção? Eis a questão.



Sim o .NET pode ser descriptografado, assim como Clipper, Java, VB, Delphi e deve haver mais de uma dúzias de outras linguagens com os mesmos problemas e é um desafio enorme fazer um sistema com o mínimo de segurança.

Quanto ao meu caso, a idéia é essa mesmo, o usuário tem o login e a senha com ele e ele conhece, ora os banco fazem isso, não é mesmo ?. Então nome do usuário e senha do usuário são responsabilidades do usuário.

Eu acredito que você deva dar uma chance a você mesmo e aprender .NET, eu só muito principiante ainda mas posso garantir que você não vai perder nada, mas vai acrescentar em muito o seu conhecimeto.

Grato.
ENGALEXANDRE 21/09/2010 11:38:16
#353492
No meu caso, possuo um arquivo XML onde guardo as informações da conexão como [Ô]servidor[Ô], [Ô]usuário[Ô], [Ô]senha[Ô] e [Ô]nome do banco[Ô]. Guardo esse XML no diretório que eu quiser. Quando vou criar minha string de conexão faço referência ao XML para buscar [Ô]servidor[Ô], [Ô]usuário[Ô], [Ô]senha[Ô] e [Ô]nome do banco[Ô]. Dessa forma tais informações não ficam vulneráveis e nem são escritas de forma explícita no código fonte da aplicação.

Alexandre
LEVII 21/09/2010 17:50:23
#353530
O grande desafio de criar N usuários é voce ter de impor para cada usuário permissões e você ter de gerenciar isso...
é bem trabalhoso...
Sugiro antes de mais nada, realizar um estudo detalhado sobre o que voce quer realmente e qual a real necessidade de segurança...
se você quer um desafio, tenta criar um serviço onde vc passa parametros e ele retorna XML com dados a você...
assim ninguem tem acesso real ao BD...
Tópico encerrado , respostas não são mais permitidas