Jump to content

Nova Loja Oficial
loja.projetoacbr.com.br
Ajude o projeto a crescer, com estilo

Comprar

Balança SM100 performance surpreendente

Tecnologia Japonesa   Teclado e Visor resistentes a água
Consumo inteligente de etiquetas   Baixo custo de manutenção
Comunicação Ethernet e WIFI independentes

Saiba mais

Impressora de Etiquetas ELGIN - L42 PRO

Protocolos PPLA, PPLB, ZPL, EPL (automático)
Porta USB padrão Opcionais: Ethernet, Serial, Paralela
Sensor de Etiquetas Móvel Garantia de 18 meses

Saiba mais

zilion

Banco de dados Remoto

Recommended Posts

Boa tarde nobres colegas.

Uma dúvida sobre segurança em banco de dados.
Consegui fazer um teste, utilizando Delphi com MySQL, acessando um banco de dados remoto.
Para o que a aplicação vai fazer, até que está funcionando bem, mesmo com o banco de dados sendo remoto.

A dúvida.
Vocês acham que a base de dados fica muito exposta desta forma?
Sei que qualquer pessoa que tenha o IP e senha do servidor poderá acessar as informações.

Mas qual é a chance de alguém conseguir pegar a senha do banco de dados analisando pacotes de rede e coisa do tipo?

E mais uma dúvida. Existe alguma precaução a mais que eu possa tomar para deixar esse tipo de conexão mais segura?

 

Obrigado pela atenção. 

Share this post


Link to post
Share on other sites

Caro zilion, 

A proteção dos dados de conexão é extremamente importante sim, a base de dados remota está sempre sujeita a ataques.

Citar

as qual é a chance de alguém conseguir pegar a senha do banco de dados analisando pacotes de rede e coisa do tipo?

Vou te dar um exemplo, (em firebird usando o dbxConnections.ini) que é usado por muitos programadores

[CONEXAO]
DriverName=Interbase
DATABASE=C:\SISTEMA\Dados\SISTEMA.FDB
RoleName=RoleName
User_Name=sysdba
Password=masterkey
ServerCharSet=
SQLDialect=3
BlobSize=-1
CommitRetain=False
WaitOnLocks=True
ErrorResourceFile=
LocaleCode=0000
Interbase TransIsolation=ReadCommited
Trim Char=False


logo é possível entender as tags de conexão

DATABASE=C:\SCI\Dados\SISTEMA.FDB
User_Name=sysdba
Password=masterkey

Qualquer pessoa com o mínimo de conhecimento entenderá que se trata de um usuário e senha para a conexão.

 

Uma solução simples seria passar essas informações para o componente de conexão direto em código

Try
begin
ConexaoWeb.LoadParamsOnConnect := True;
Conexaoweb.ConnectionName := 'CONEXAOW';
Conexaoweb.DriverName := 'Interbase';
Conexaoweb.GetDriverFunc := 'getSQLDriverINTERBASE';
Conexaoweb.KeepConnection := True;
Conexaoweb.LibraryName := 'dbexpint.dll';
Conexaoweb.LoadParamsOnConnect := False;
Conexaoweb.LoginPrompt := False;
Conexaoweb.Params.Clear;
Conexaoweb.Params.Add('DATABASE=servidorouIP.com.br:/home/firebird/bnsci/SISTEMA.FDB');
Conexaoweb.Params.Add('RoleName=RoleName');
Conexaoweb.Params.Add('User_Name=USUARIO');
Conexaoweb.Params.Add('Password=SENHA123');
Conexaoweb.Params.Add('ServerCharSet=');
Conexaoweb.Params.Add('SQLDialect=3');
Conexaoweb.Params.Add('BlobSize=-1');
Conexaoweb.Params.Add('CommitRetain=False');
Conexaoweb.Params.Add('WaitOnLocks=True');
Conexaoweb.Params.Add('ErrorResourceFile=');
Conexaoweb.Params.Add('LocaleCode=0000');
Conexaoweb.Params.Add('Interbase TransIsolation=ReadCommited');
Conexaoweb.Params.Add('Trim Char=False');

Conexaoweb.Tag := 0;
Conexaoweb.VendorLib := 'gds32.dll';

ConexaoWeb.LoginPrompt := False;
ConexaoWeb.Connected := True;
end;
  except
  Begin
  MessageDlg('Erro ao conectar ao servidor', mtWarning, [mbOK], 0);
  end;


Esse é só um exemplo, existem várias outras formas de se fazer, vai depender do componente e do seu projeto... 

 

Espero ter ajudado!

Grande Abraço!

Bruno

 

 

Edited by Bruno Giovani Caltran
  • Like 1

Share this post


Link to post
Share on other sites

Bom dia. Bruno
Faço isso no meu sistema via código, mas ainda mesmo assim fica exposto a ataques (verificando pacotes da rede ) voce conhece alguma forma de proteger a este tipo de ataque.

Obrigado
 

Share this post


Link to post
Share on other sites

Boa tarde,

Além do que já disseram em inserir as informações no código e não deixá-los no componente também pode-se utilizar o compressor do executável UPX que ele também esconde essas configurações.

Outra opção muito interessante é utilizar o FireDAC com conexão SSL http://docwiki.embarcadero.com/RADStudio/Seattle/en/Connect_to_MySQL_Server_(FireDAC)

Utilizando esses parâmetros:

 
DriverID=MySQL
Server=mysrv
Port=3307
Database=addemo
UseSSL=True
SSL_ca=ca-cert.pem
SSL_cert=client-cert.pem
SSL_key=client-key.pem

A conexão com o banco de dados fica segura.

 

 

Share this post


Link to post
Share on other sites
Em 12/07/2016 at 10:15, Bruno Giovani Caltran disse:

Caro zilion, 

A proteção dos dados de conexão é extremamente importante sim, a base de dados remota está sempre sujeita a ataques.

Vou te dar um exemplo, (em firebird usando o dbxConnections.ini) que é usado por muitos programadores

[CONEXAO]
DriverName=Interbase
DATABASE=C:\SISTEMA\Dados\SISTEMA.FDB
RoleName=RoleName
User_Name=sysdba
Password=masterkey
ServerCharSet=
SQLDialect=3
BlobSize=-1
CommitRetain=False
WaitOnLocks=True
ErrorResourceFile=
LocaleCode=0000
Interbase TransIsolation=ReadCommited
Trim Char=False


logo é possível entender as tags de conexão

DATABASE=C:\SCI\Dados\SISTEMA.FDB
User_Name=sysdba
Password=masterkey

Qualquer pessoa com o mínimo de conhecimento entenderá que se trata de um usuário e senha para a conexão.

 

Uma solução simples seria passar essas informações para o componente de conexão direto em código

Try
begin
ConexaoWeb.LoadParamsOnConnect := True;
Conexaoweb.ConnectionName := 'CONEXAOW';
Conexaoweb.DriverName := 'Interbase';
Conexaoweb.GetDriverFunc := 'getSQLDriverINTERBASE';
Conexaoweb.KeepConnection := True;
Conexaoweb.LibraryName := 'dbexpint.dll';
Conexaoweb.LoadParamsOnConnect := False;
Conexaoweb.LoginPrompt := False;
Conexaoweb.Params.Clear;
Conexaoweb.Params.Add('DATABASE=servidorouIP.com.br:/home/firebird/bnsci/SISTEMA.FDB');
Conexaoweb.Params.Add('RoleName=RoleName');
Conexaoweb.Params.Add('User_Name=USUARIO');
Conexaoweb.Params.Add('Password=SENHA123');
Conexaoweb.Params.Add('ServerCharSet=');
Conexaoweb.Params.Add('SQLDialect=3');
Conexaoweb.Params.Add('BlobSize=-1');
Conexaoweb.Params.Add('CommitRetain=False');
Conexaoweb.Params.Add('WaitOnLocks=True');
Conexaoweb.Params.Add('ErrorResourceFile=');
Conexaoweb.Params.Add('LocaleCode=0000');
Conexaoweb.Params.Add('Interbase TransIsolation=ReadCommited');
Conexaoweb.Params.Add('Trim Char=False');

Conexaoweb.Tag := 0;
Conexaoweb.VendorLib := 'gds32.dll';

ConexaoWeb.LoginPrompt := False;
ConexaoWeb.Connected := True;
end;
  except
  Begin
  MessageDlg('Erro ao conectar ao servidor', mtWarning, [mbOK], 0);
  end;


Esse é só um exemplo, existem várias outras formas de se fazer, vai depender do componente e do seu projeto... 

 

Espero ter ajudado!

Grande Abraço!

Bruno

 

 

Outra coisa que não nos atentamos: se alguém abrir o seu executável com editor HexDecimal e pesquisar por password irá encontrar facilmente a SENHA123. Depois que descobri (e testei) isso passei a criptografar e guardar a senha nim arquivo .ini, depois sim coloco no parâmetro, descriptografando antes é claro, via código como você fez.

Share this post


Link to post
Share on other sites

Uma outra forma, e utilizo há tempos assim, é criar uma criptografia própria e usar um arquivo .INI com esta configurações, idênticas ao DBExpress.

Desta forma toda vez que mudar o local do banco ou utilizar em outros clientes o mesmo .EXE basta mudar o caminho no .INI sendo que as informações estarão lá criptografadas.


_____________________________________

Junior - Rhovanion Tecnologia

(11) 4224.6543

Share this post


Link to post
Share on other sites

 Uma forma bem elegante seria vc usar um ws pra acessar se quiser use meu pacote o rest dataware que ele tem autenticação do serviço ao invés de banco eh mais rápido para acessar online pois ainda tem compressão de dados e se quiser pode habilitar o ssl e ficar melhor ainda para não deixar o db exposto

Share this post


Link to post
Share on other sites
Em 01/06/2017 at 21:26, xyberx disse:

 Uma forma bem elegante seria vc usar um ws pra acessar se quiser use meu pacote o rest dataware que ele tem autenticação do serviço ao invés de banco eh mais rápido para acessar online pois ainda tem compressão de dados e se quiser pode habilitar o ssl e ficar melhor ainda para não deixar o db exposto

Ola Amigo Boa Tarde

Como funciona este seu pacote rest dataware? tem como me disponibilizar para estudo?

Share this post


Link to post
Share on other sites
7 minutos atrás, asterix disse:

Ola Amigo Boa Tarde

Como funciona este seu pacote rest dataware? tem como me disponibilizar para estudo?

https://sourceforge.net/projects/rest-dataware-componentes/


Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
http://www.juliomarmarchetti.com.br
Embarcadero MVP

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...