Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 1632 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

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. 

  • 2 semanas depois ...
  • Membros Pro
Postado (editado)

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

 

 

Editado por Bruno Giovani Caltran
  • Curtir 1
  • 3 meses depois ...
Postado

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
 

Postado

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.

 

 

  • 2 meses depois ...
Postado
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.

  • 4 meses depois ...
  • Membros Pro
Postado

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

  • 3 semanas depois ...
Postado

 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

  • 3 meses depois ...
Postado
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?

  • 2 anos depois...
Postado
Em 01/06/2017 at 20: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

poderia disponibilizar para delphi rio 10.3.3

  • 3 semanas depois ...
  • Este tópico foi criado há 1632 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.