GARANTIR DESCONTO

Fórum Como evitar SQL inject no delphi #421141

07/08/2012

0

Gostaria de saber se existe alguma funçao para evitar outro usuario de inserir um codigo malicioso no sistema..

Por exemplo SQL inject, ou até mesmo aqueles programas que injetao uma dll de terceito no processo do seu sistema que esta
sendo executado...


Alguem poderia ajudar?
Douglas Michelino

Douglas Michelino

Responder

Posts

07/08/2012

Douglas Michelino

Pessoal, ja resolve estou passando por parametros, e rodando numa rotina as informacoes do usuario

porem fiquei entrigado, o usuario conseguiu pegar a senha de um nome de usuario que falei pra ele tentar pra me provar
e o mesmo pegou a senha, e nao possui nenhum grid que gere informacao onde ele pudesse modificar os comandos, e gerar a listagem....


Existe algum meio de dar algum inject que ele retorno alguma msg com o conteudo do campo solicitado pelo inject?
Responder

Gostei + 0

08/08/2012

Joel Rodrigues

Opa, primeiramente, como você está fazendo esta rotina de login?

Outra, o que este usuário tinha à disposição para tentar ´´invadir´´ seu sistema?
Responder

Gostei + 0

08/08/2012

Bruno Leandro

como voce se conecta ao banco de dados arquivo ini ou algo do genero, essas informações são criptografadas ?
ou voce utiliza os valores ja setados no componente de conexão,
os dados dos usuarios, tipo senha estao criptografadas no banco de dados, pode ser algumas formas de capturar essas informações
Responder

Gostei + 0

08/08/2012

Douglas Michelino

utilizo o Adoconnection, e a connectioString é passado no momento da da conexao, ou toda vez que preciso utilizar a conexao
executo uma funcao onde ela enche o connectionstring, e depois abre a conexao , executa a operacao e fecha a conexao novamente.

Estou fazendo desta forma, fixa dentro do sistema, porem so passada para o componente no momento da conexao, e execucao.
Responder

Gostei + 0

08/08/2012

Joel Rodrigues

Só por garantia, o usuário não tem acesso direto ao banco, tem?
Responder

Gostei + 0

08/08/2012

Douglas Michelino

Tem nada....

Pra voce ter uma ideia, coloquei um anti debug como parte do projeto, criei uma funcao anti inject que pega o conteudo digitado pelos edits e verifica se tem comandos SQL...E por fim estou passando as informaçoes por parametros, exemplo



query.sql.add(select *from usuario where usuario = :usuario and senha = :senha);
query.Parameters.ParamByName(usuario).value:=editwusuario.text;
query.Parameters.ParamByName(senha).value:=editwsenha.text;

isso depois deu ter passado ele na funcao do anti inject..........

Acabei de mudar a senha do SQL remoto... Pois é remoto o sistema... E mudei a senha o login, e mesmo assim
ele acabou de pegar a senha nova que acabei de alterar...

Sinceramente eu nao sei mais como resolver isso.
Responder

Gostei + 0

08/08/2012

Deivison Melo

Qual a forma que montou a query?

Utilizou a atribuição diretamente dos objetos da vcl do delphi ou está utilizando a consulta através de parâmetros, passando os valores dos parâmetros através desses objetos?
Responder

Gostei + 0

08/08/2012

Douglas Michelino

Outro detalhe, coloquei uma funcao anti inject de DLL tamen, e estou dando pack no executavel com molebox.
Responder

Gostei + 0

08/08/2012

Douglas Michelino

A conexao esta sendo feita assim


dm.ADOAUX.ConnectionString:=Provider=SQLOLEDB.1;Password=senha;Persist Security Info=True;Encrypt=yes;User ID=sa;Initial Catalog=BANCO;Data Source=IP;

e as consultas sao passadas por parametros como demonstrado acima.
Responder

Gostei + 0

08/08/2012

Douglas Michelino

Mais um detalhe eu liguei o SQLProvider para pegar de onde vinha o comando e fechei o acesso esperando o mesmo tentar pegar
os dados, quando ele me mandou fui procurar ver o Sqlprovider para verificar, e o mesmo havia fechado, sem ninguem mexer.
Responder

Gostei + 0

08/08/2012

Douglas Michelino

Isso foi o que ele me disse:

Cara... Não sei se ja falaram aqui no tópico.
Mais existe uma falha de segurança SUPER grave nesse sistema...
Você estabelece um canal diretamente com o SQL do servidor...
Consegui executar comandos pelo editor sem problema algum...

Da uma olhada nisso ai...

Abraços!

Ele diz que estabeleceu uma conexao direta com o sql.... E acredito que esteja conseguindo pegar meu dados, que fazem a conexao pelo ado..

Alguem poderia ajudar ou dar uma luz, pois to num tunel e escuro kkk
Responder

Gostei + 0

08/08/2012

Anderson


query.sql.add(select *from usuario where usuario = :usuario and senha = :senha);
query.Parameters.ParamByName(usuario).value:=editwusuario.text;
query.Parameters.ParamByName(senha).value:=editwsenha.text;



Certifique-se de:

- Gravar a senha criptografada no banco de dados, usando um hash (SHA-1, SHA-256, etc.)
- Não permitir o cadastro de senhas fracas (inferiores a 6 dígitos)
- Colocar no código limitadores de tamanho para os parâmetros
- Colocar no código validadores de instruções SQL (não executa a query que tem comandos não previstos)
- Orientar os usuários que divulgar a senha pode resultar em penalidades (demissão por justa causa)
- Bloquear login do usuário se errar senha mais de 3 vezes (previne contra ataque por força bruta)
- Bloquear IP que tentar ataque por força bruta (previne utilização de ferramentas de força bruta)
- Inspecionar máquinas a procura de keyloggers
- Limitar acessos para não ocorrer vazamento de informações (do ambiente de desenvolvimento ao de produção)
- Não permitir utilização de senha fraca pelo DBA
- Todos os patches de segurança disponíveis estão aplicados no sistema operacional, no sgbd, antivírus, firewall
- Ter um log (registro) de acessos ao sistema identificando IP, data, hora, usuário, terminal, etc.
- Analisar periodicamente os logs de acesso (log não monitorado/analisado é inútil)
- Criar chave criptografada de identificação do terminal (somente terminais autorizados terão acesso ao sistema)
- Disponibilizar cartilha com informações sobre vírus, worms, trojans e engenharia social para orientar usuários
- Manter backups em local seguro e de acesso restrito para evitar o vazamento de informações
- Bloquear/limitar acessos físicos ao servidor
- Bloquear/limitar a utilização de mídias no local de trabalho (pendrive, dvd, ...)
- Inspecionar máquinas e limitar/bloquear acesso remoto (TeamView, TightVnc, UltraVnc, ...)
- Fazer logoff na aplicação se inativa por mais de XX minutos
- Controlar a lista de usuários cadastrados no banco de dados (usuários desligados da empresa devem ser bloqueados)

Em se tratando de segurança da informação, vai muito mais da conduta do usuário do que da tecnologia. Boa parte das invasões são resultados da cooperação (voluntária ou não) do usuário que forneceu alguma chave de acesso.

Abraços,

Anderson:.
Responder

Gostei + 0

08/08/2012

Bruno Leandro

ele pode estar capturando com um sniffer, ou seja, ele pode estar ouvindo tudo que esta comunicando entre a rede e o sistema, uma solução seria utilizar ssl
Responder

Gostei + 0

09/08/2012

Douglas Michelino

Voce diz que por SSL a pessoa nao consegue pegar os pacotes por Sniffer?
Responder

Gostei + 0

09/08/2012

Douglas Michelino

Outro detalhe: Voce poderia mostrar um exemplo de conexao ado, utilizando SSL.

Obrigado.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar