PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 25 → Wx - Exemplo de como Evitar SQL Inject e Proteger seu banco de dados
Wx - Exemplo de como Evitar SQL Inject e Proteger seu banco de dados
Débuté par adrianoboller, 20 nov. 2015 23:40 - 3 réponses
Membre enregistré
3 655 messages
Popularité : +175 (223 votes)
Posté le 20 novembre 2015 - 23:40
Prezados,

Injeção de SQL é uma técnica usada para tirar proveito de vulnerabilidades não validados de entrada para passar comandos SQL através de uma aplicação Web para execução por um banco de dados back-end. Atacantes tirar proveito do fato de que os programadores muitas vezes encadear comandos SQL com parâmetros fornecidos pelo usuário, e podem incorporar comandos SQL dentro desses parâmetros. O resultado é que o atacante pode executar consultas SQL arbitrárias e / ou comandos no servidor de banco de dados back-end através da aplicação Web.

Segue um exemplo de como evitar SQL Inject e Proteger seu banco de dados:

//Botao Salvar dados do Cadastro do Paciente

IF EDT_NomePaciente = "" THEN
Info("Nome do Pacientenão informado.")
RETURN
END

IF EDT_EmailCadastroPaciente = "" THEN
Info("E-mail do Paciente não informado.")
RETURN
END

IF EDT_DDD = 0 THEN
Info("DDD não informado.")
RETURN
END

IF EDT_TelefonePaciente = "" THEN
Info("Telefone do Paciente não informado.")
RETURN
END

IF EDT_SenhaCadastroPaciente = "" THEN
Info("Senha do Paciente não informada.")
RETURN
END

IF Length(EDT_SenhaCadastroPaciente) < 6 OR Length(EDT_SenhaCadastroPaciente) > 12 THEN
Info("A senha do Paciente precisa ter entre 6 e 12 dígitos.")
RETURN
END

IF EDT_ConfirmacaoSenha <> EDT_SenhaCadastro THEN
Info("As senhas não coincidem.")
RETURN
END

ip is string = BrowserIPAddress()

//Crie um Data Source e definina os nomes dos paramentros e iguale aos campos da tela do eu sistema

dadosProcedure is Data Source

dadosProcedure.nome = EDT_NomePaciente
dadosProcedure.email = EDT_EmailCadastroPaciente
dadosProcedure.ddd = EDT_DDD
dadosProcedure.telefone = EDT_TelefonePaciente
dadosProcedure.senha = EDT_SenhaCadastroPaciente

//Ate aqui simples assim, agora voce passa os paramentros usando vairaveis de mesmo nome com o @ apenas no inicio separadas com virgula e testa os parametros, pelo debug tente dar aspa simples e injetar comandos de select, insert, update no codigo pra ver se consegue executar um comando no banco de dados... dessa forma fica seguro nao tera problema e tera certeza que o sistema foi bem feito.

ok is boolean = HExecuteSQLQuery(dadosProcedure, ConexaoSQL, hQueryWithoutCorrection, "EXEC CadastroPaciente @nome, @email, @ddd, @telefone, @senha")

IF ok = True THEN

IF HNbRec(dadosProcedure) = 0 OR HNbRec(dadosProcedure) > 1 THEN
Info("Erro interno no servidor: O resultado falhou.")
RETURN
END

FOR EACH dadosProcedure
SWITCH dadosProcedure.Resultado
CASE 201: // Sucesso, cadastro Paciente criado
PageDisplay(PAGE_Paciente, EDT_EmailCadastroPaciente)
CASE 409: // Cadastro do Paciente já existente
Info("Cadastro já existente no mesmo endereço de e-mail.", "Use a opção ""Esqueci Minha Senha"" para recuperar a sua senha.")
CASE 403: // Não permitido: conta desabilitada
Info("Cadastro do Paciente não liberado.")
OTHER CASE:
Info("Erro interno no servidor: O resultado foi inesperado.")
END
END
ELSE
Info("Erro interno no servidor: A conexão não conseguiu prosseguir.")
PageDisplay(PAGE_Login)
END


LINKS COMPLEMENTARES:
https://pt.wikipedia.org/wiki/Inje%C3%A7%C3%A3o_de_SQL
https://www.imperva.com/resources/glossary…
http://www.programmerinterview.com/index.php/database-sql/sql-injection-example/

--
Adriano Jose Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
______________________________________________
Membre enregistré
3 655 messages
Popularité : +175 (223 votes)
Posté le 20 novembre 2015 - 23:51
Prezados,

Um adendo como sempre, mais super relevante, outro detalhe sempre defina a
capacidade maxima de caracteres nos campos do tipo string, ali que mora o perigo.

Forte abraço e sucesso profissional

--
Adriano Jose Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
______________________________________________
Membre enregistré
44 messages
Popularité : +7 (7 votes)
Posté le 23 février 2016 - 19:15
Perfeito!

--
Analista de Sistemas Jr
Assessor de Comunicação
Fotografo nas horas Vagas
Pai da Alícia e Marido da Andréa <3
Membre enregistré
3 655 messages
Popularité : +175 (223 votes)
Posté le 10 avril 2016 - 18:00
Prezados,

Apenas um conselho:

Injeção de SQL é uma técnica de injeção de código, usado para atacar aplicações orientadas a dados, no qual são inseridos em um campo de entrada instruções SQL mal-intencionados para execução (por exemplo, para despejar o conteúdo do banco de dados para o atacante).
Esses ataques permitem que os invasores identidade paródia, adulteração com os dados existentes, questões de repúdio causa tal como anular operações ou mudar saldos, permitem a divulgação completa de todos os dados no sistema, destruir os dados ou torná-la indisponível, e tornar-se administradores do servidor de banco de dados.


É um dos ataques mais comuns nos sites. As melhores senhas e a melhor mentalidade pode não ser suficiente. Se você tem um site que usa esse tipo de banco de dados, você deve aprender a defender-lo.

Um exemplo de ataque:

Usuario: admin
Senha: 'or''='

Aqui 5 pontos para defender-se :

1. Atualize seu sistema.
Não podemos ver um monte de problema sobre a vulnerabilidade.
Atualize os scripts (sistemas de gestão, fóruns) para corrigir esses problemas.

2. Reduzir os privilégios.
Seu serviço não deve ter privilégios elevados para combater técnicas de hacking que os obrigam.

3. Verificação de informações.
Uma mensagem de erro ajuda a hackers para encontrar as vulnerabilidades.
Configurar o IIS para enviar uma mensagem de erro genérico em vez de uma mensagem específica.

. 4. Lista Negra
. Uma lista de caracteres não permitidos
O primeiro a colocar em é esta: "
O outro é o carácter" espaço ".

5. Lista branca.
Uma lista de caracteres permitidos.
Este método é mais complexa do que a anterior.
Com uma boa gestão dos caracteres desejados, esta pode ser uma boa solução.

Forte Abraço

:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.blogspot.com.br/