Usuário com melhor resposta
Ajax / Angular, etc... com C#

Pergunta
-
Fala pessoal, bom dia.
Apenas por questão de dúvida.
As vezes passamos dados de formulário via ajax para um metodo C#.
Porém quando passamos conforme trecho de código:
- $scope.User = {};
- $scope.User.firstName = "Nome do usuário";
Informamos o nome da field do campo "ficando exposto".
Como vocês fazem para evitar isto, pois ficando exposto pode acontecer alguma injeção no SQL, já que a página e o método também é citado.- Movido AndreAlvesLima segunda-feira, 8 de janeiro de 2018 14:18
Respostas
-
Substituir o ajax não impedirá o uso de BOT. O captcha é uma das formas mais simples, mas há também recursos de throttling que verificam se um usuário fez mais que X requisições para uma mesma url a cada Y segundos/minutos/etc.
Exemplo: https://github.com/stefanprodan/MvcThrottle
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
- Editado Juliano Nunes Silva Oliveira quinta-feira, 4 de janeiro de 2018 17:25
- Marcado como Resposta Filipe B Castro sexta-feira, 5 de janeiro de 2018 17:28
Todas as Respostas
-
O fato do nome do campo ficar visível não é o maior dos problemas, o ideal é que trate as informações (valores) que vieram na requisição para impedir injeção de SQL, além de que bibliotecas como Entity Framework possuem mecanismos de segurança para isto.
https://docs.microsoft.com/pt-br/dotnet/framework/data/adonet/ef/security-considerations
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
-
A injeçao SQL só vai ocorrer se voce usar algo como
sql="Insert into User (firstName) values ('" + user.firstname +"')";
e se voce fizer
$scope.User.firstName = "test');drop table clients;--";
Note que a injeçao SQL ocorre na forma como voce gerencia o CRUD. Se voce usa EF (ou qualquer outro ORM) ou usa parametros, automaticamente voce esta protegido de Injeçao SQL.
Neste caso, a unica coisa que voce vai obter é um usuario chamado test');drop table clients;--
att
William John Adam Trindade
Analyste-programmeur
Sogi Informatique ltée
If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta". -
Pois é, então vamos falar sobre essa parte que citou "Neste caso, a unica coisa que voce vai obter é um usuario chamado test');drop table clients;--"
fizeram exatamente isto, criaram 25k de usuários na minha tabela... o que eu quero é exatamente evitar essas injeções..
- Editado Cara de pastel quinta-feira, 4 de janeiro de 2018 17:05
-
Mas foi por injeçao SQL ou foi um BOT (escrito em python, p.ex) que executou 25k vezes a adiçao de usuarios?
Se foi realmente por injeçao SQL, entao voce deveria utilizar EF (ou outro ORM) para evitar isso.
Agora se foi um bot, entao eu sugiro usar um captcha para adiçao de usuarios. Desta forma voce elimina o uso de BOTs
Aqui um tutorial de uso de captcha
Att
William John Adam Trindade
Analyste-programmeur
Sogi Informatique ltée
If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".
- Editado William John Adam TrindadeModerator quinta-feira, 4 de janeiro de 2018 17:14
-
Entendi... como foi algo em torno de 10 minutos só pode ser um BOT.
O captcha posso inserir, mudar para EF não da mais.
Existe outra maneira que vocês fazem sem ser com captcha em uma situação como essa?
Estava pensando em não usar mais o ajax para insert, usaria apenas para consultas.O que acham?
-
Substituir o ajax não impedirá o uso de BOT. O captcha é uma das formas mais simples, mas há também recursos de throttling que verificam se um usuário fez mais que X requisições para uma mesma url a cada Y segundos/minutos/etc.
Exemplo: https://github.com/stefanprodan/MvcThrottle
Juliano Nunes - http://linkedin.com/in/julianonunes
Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.
Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.
- Editado Juliano Nunes Silva Oliveira quinta-feira, 4 de janeiro de 2018 17:25
- Marcado como Resposta Filipe B Castro sexta-feira, 5 de janeiro de 2018 17:28
-