Fórum Como evitar SQL inject no delphi #421141
07/08/2012
0
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
Curtir tópico
+ 0Posts
07/08/2012
Douglas Michelino
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?
Gostei + 0
08/08/2012
Joel Rodrigues
Outra, o que este usuário tinha à disposição para tentar ´´invadir´´ seu sistema?
Gostei + 0
08/08/2012
Bruno Leandro
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
Gostei + 0
08/08/2012
Douglas Michelino
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.
Gostei + 0
08/08/2012
Joel Rodrigues
Gostei + 0
08/08/2012
Douglas Michelino
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.
Gostei + 0
08/08/2012
Deivison Melo
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?
Gostei + 0
08/08/2012
Douglas Michelino
Gostei + 0
08/08/2012
Douglas Michelino
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.
Gostei + 0
08/08/2012
Douglas Michelino
os dados, quando ele me mandou fui procurar ver o Sqlprovider para verificar, e o mesmo havia fechado, sem ninguem mexer.
Gostei + 0
08/08/2012
Douglas Michelino
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
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:.
Gostei + 0
08/08/2012
Bruno Leandro
Gostei + 0
09/08/2012
Douglas Michelino
Gostei + 0
09/08/2012
Douglas Michelino
Obrigado.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)