none
Ajax / Angular, etc... com C# RRS feed

  • 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:

    1.                $scope.User = {};    
    2.                $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.

    quinta-feira, 4 de janeiro de 2018 13:51

Respostas

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.

    quinta-feira, 4 de janeiro de 2018 14:12
  • 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".

    quinta-feira, 4 de janeiro de 2018 14:13
    Moderador
  • 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..


    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

    http://www.c-sharpcorner.com/article/implement-different-type-of-captchamvc-mvc5-with-asp-net-mvc-using-nuget-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".




    quinta-feira, 4 de janeiro de 2018 17:11
    Moderador
  • 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?

    quinta-feira, 4 de janeiro de 2018 17:19
  • 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.


    quinta-feira, 4 de janeiro de 2018 17:24
  • Bacana Juliano, obrigado vou estudar a respeito.
    quinta-feira, 4 de janeiro de 2018 17:43