O que é SQL injection e como resolver

Поделиться
HTML-код
  • Опубликовано: 3 окт 2024
  • 📚 Livro para entender estruturas de dados e algoritmos: amzn.to/4bYu4VE

Комментарии • 75

  • @michelpaiva5800
    @michelpaiva5800 5 месяцев назад +28

    Essa solução de limpar o input não é ideal, digamos que vc que vc tem um campo de texto livre em que o usuário pode inserir qualquer carácter, essa solução alteraria o input. O recomendado para raw queries é apenas usar queries parametrizadas que separam os dados dos comandos a nível de Engine do banco, também conhecidos como prepared statements e vc ja ta usando isso desde o começo quando usa "values (?, ?)", isso já previne injection.
    O problema seria se vc tivesse algo como: "INSERT INTO users (name, email) VALUES (" + name + "," + email +")".

    • @lucaseduardo2810
      @lucaseduardo2810 6 дней назад

      Tirei um print do seu comentário. 😂😂😂😂

  • @gabrieljose7041
    @gabrieljose7041 5 месяцев назад +12

    Vídeo bem legal e direto ao ponto!!! Mas só queria comentar sobre a parada de não falar muito sobre como seria feita a sanitização do sql, eu entendo e concordo que o uso de uma lib externa seria a melhor escolha, mas o conhecimento vindo de como esse processo da própria lib é feito é muito bom pra quem está aprendendo, ensina muito e ajuda bastante tbm a diminuir o medo de sql injections como é o caso. Contudo, tbm entendo q pode não ser o intuito do vídeo, mas seria um conteúdo muito bom.

  • @rrsrjspa
    @rrsrjspa 5 месяцев назад +11

    Trabalho com SQLAlchemy e gosto muito.

  • @wallace4337
    @wallace4337 5 месяцев назад +6

    eu costumo usar ambos nos meus projetos, ORM e SQL. ORM quando eu quero coisas mais simples, e SQL quando eu preciso fazer um query mais complexa

  • @okarluz
    @okarluz 5 месяцев назад +14

    0:24 Dei uma risada sincera

    • @ulyssesmoura4890
      @ulyssesmoura4890 5 месяцев назад +1

      O caos que esse Oi tudo bem causou hahahahaah

    • @DevsVult
      @DevsVult 5 месяцев назад

      Do nada né kkkkk

    • @Lucas-pw2xx
      @Lucas-pw2xx 4 месяца назад

      foi do 0 ao 100 mt rápido kkkkkk

  • @felipeoriani
    @felipeoriani 5 месяцев назад +1

    Excelente vídeo Augusto. Não conheço a fundo o ecosistema de Python, mas acho importante destacar que estas estratégias provavelmente utilizam nos bastidores os `bind parameters`, que é algo que melhora a saude do banco de dados como um todo (performance por conta dos planos de execução reaproveitaveis, segurança evitando o SQL injection e Integridade para garantir os dataTypes corretos). Para quem não conhece, vale a pena a leitura do tópico, podendo variar a depender do RDBMS.

  • @arthuralves2509
    @arthuralves2509 5 месяцев назад +4

    A ORM do Django é uma delicinha.

    • @leofranca4286
      @leofranca4286 2 месяца назад +1

      Tava pensando nisso quando ele reclamou do ORM hahahah

  • @RenanMiranda-c1o
    @RenanMiranda-c1o 2 дня назад

    ORM é essencial para projetos de grande porte, os problemas de performance, são causados por falta de conhecimento e mau uso, na maior parte das vezes, por mais que tabela e objeto sejam coisas diferentes, ambos tem estruturas compativeis, onde é possível realizar um de/para sem muitas dificuldades, o ponto é entender o que ela faz por de baixo dos panos, e modelar a estrutura de objetos de forma que as operações fiquem performaticas, fazer sem ORM custa bem mais a curto e longo prazo, se tratando de uma modelagem complexa.
    Fora isso, para coisas de pequeno porte, o ideal é o uso de prepared statement mesmo, sanitização acho gambi, até porque pode ser feira de forma incorreta, além disso você pode precisar aceitar caracteres diferentes.
    E mesmo que eu fosse sanitizar, nesse caso não seria onde eu capturo o Input, se essa sanitização tem objetivo de prevenir SQL Injection, deveria estar no "Service" ou "Component" que esta se comunicando com o banco, delegar isso pra camada que recebe o input faz ela ficar com responsabilidades que não são dela, além disso alguém pode criar um novo campo e esquecer de sanitizar com facilidade, pode montar um outro form que recebe o update por exemplo, do mesmo dado e também esquecer de sanitizar, é uma coisa que você teria que ficar repetindo consistentemente o que não é nada legal, e abre margem para esquecer e ter o SQL Injection.
    Mas concordo que é um problema de solução simples.

  • @MrRodrigorrch
    @MrRodrigorrch 5 месяцев назад +4

    Fala mais sobre ORM =)

  • @gustavofelipe9437
    @gustavofelipe9437 5 месяцев назад +1

    a ORM do Django é uma delicinha

  • @nicholastn
    @nicholastn 5 месяцев назад +4

    Trabalhando com Rails, todos esses gaps de ORM ficam mais difíceis de acontecer.

  • @thiagorodrigo1498
    @thiagorodrigo1498 5 месяцев назад

    Adoro seus conteúdos Augusto!! Muito obrigado por compartilhar! Seu formato de videos rápidos é tao bom quanto os videos mais longos!!! Uma dúvida, o que é "sanitizar"?

    • @leandro_adrian
      @leandro_adrian 5 месяцев назад +1

      É basicamente você fazer uma limpeza/filtro nos dados de entrada de um formulário, removendo os caracteres indesejados... como < e >, que podem ser interpretados como codigo HTML e as aspas simples e duplas, que podem ser consideradas instruçoes SQL

  • @aKdn1982n
    @aKdn1982n 5 месяцев назад

    Ótimo vídeo, poderia falar sobre Session Hijacking em um próximo?

  • @MatheusSilva-lh3uh
    @MatheusSilva-lh3uh 5 месяцев назад

    Fala mais sobre ORMs!

  • @felipeoliveira9512
    @felipeoliveira9512 5 месяцев назад +7

    to lendo isso em 2024 e me perguntando... existe algum sistema ainda vulneravel a SQL injection? pq acho que qualquer ORM de qualquer framework ja resolve isso... sera que alguem ainda faz raw SQL? talvez se precisar de performance mas se a pessoa tem ideia disso entao pelo menos um addslashes ela deve saber... honestamente, alguem que faz um sistema vulneravel a SQL Injection em 2024 deveria se preocupar tbm com "back-end language injection" e JS for front-end injection tbm... mas em resumo, sera que isso ainda acontece?(eu perguntando sabendo que a resposta e sim, sempre tem um iluminado)

    • @nivaldobrasil
      @nivaldobrasil 5 месяцев назад +5

      o pior de tudo é o zé DBA deixar o user com permissão DDL. Mas do jeito que as coisas estão, esse tipo de vídeo é necessário p ilustrar.

    • @thKaliDev
      @thKaliDev 5 месяцев назад

      desculpa a palavra... existe pra caralho

    • @pauloabreu4912
      @pauloabreu4912 5 месяцев назад +2

      os .gov infelizmente...

    • @thKaliDev
      @thKaliDev 5 месяцев назад +2

      não só os gov, tem vários ambientes po..

    • @herobrayneuchiha9304
      @herobrayneuchiha9304 5 месяцев назад

      Eu aprendendo d.s. pelo Senai sou muito capaz de fazer isso!

  • @joelmattos7276
    @joelmattos7276 5 месяцев назад +1

    Fico feliz em descobrir que eu não sou o unico que detesta trabalhar com orms e prefere mil vezes escrever o sql na mão...

  • @coffee-is-power
    @coffee-is-power 5 месяцев назад

    Se usares a biblioteca sqlx no rust, a aplicação e literalmente invulnerável a SQL injection porque o macro `sqlx::query!` apenas aceita string literals e te força a usar os parâmetros com '?' em tempo de compilação

  • @herobrayneuchiha9304
    @herobrayneuchiha9304 5 месяцев назад +1

    Sou dev iniciante, devs antigos concordam com não usar orm e apenas usar biblioteca para sanitizar?

  • @tarciomeireles3194
    @tarciomeireles3194 5 месяцев назад

    Só usar Prepared Statement

  • @dofstein
    @dofstein 5 месяцев назад +1

    O nome disso -> ' "

  • @TalesIagoBatista
    @TalesIagoBatista 5 месяцев назад

    Cara, muito bom seus videos! Mas ajuda nois ai, da um up no volume do mic! kkkk Meu fone é ruim, mesmo tudo no max fica bem baixinho.

  • @brazilianmmalegends
    @brazilianmmalegends 5 месяцев назад

    Seu canal me ajuda mto na facul irmão abbbcs

  • @vitvitvitvitvitvitvitvit
    @vitvitvitvitvitvitvitvit 5 месяцев назад

    sinceramente só nao uso ORM pq eu acho horrível fazer queries dinâmicas com select, pq geralmente precisa ter parâmetros dinâmicos (paginação, offset, where, joins, etc).
    mais fácil fazer puro e sanetizar o input

  • @zecapaugordinho-bl4xt
    @zecapaugordinho-bl4xt 5 месяцев назад

    Otimo video, mano galeguinho !!!!

  • @yuri_cmps
    @yuri_cmps 5 месяцев назад

    Monstro demais

  • @felipezandonadi20
    @felipezandonadi20 5 месяцев назад +6

    Sabe o que um esqueleto caipira falou para o outro?
    O ssô

  • @patrickoliveira6161
    @patrickoliveira6161 5 месяцев назад +40

    como resolver sql injection: não usar sql

    • @williamxsp
      @williamxsp 5 месяцев назад +2

      @@naf9392 que que o PHP tem a ver com SQL injection?

    • @thiagorodrigo1498
      @thiagorodrigo1498 5 месяцев назад +2

      Como se cria um sistema que armazena dados sem SQL? Desculpa a pergunta, sou novo.

    • @theusoff__
      @theusoff__ 5 месяцев назад +6

      @@thiagorodrigo1498 Você pode usar bancos de dados não relacionais(NoSQL) para fazer a persistência de dados da sua aplicação dependendo do tipo de projeto, mas realmente projetos grandes "vão" usar ainda SQL.
      O normal hj em dia é usar os 2 , ai o NoSQL fica pra deixar as aplicações mais rápidas em acesso a dados específicos, por conta da rapidez de bancos de dados NoSQL

    • @thiagorodrigo1498
      @thiagorodrigo1498 5 месяцев назад

      O NoSQL tbm tem esses problemas de injection?

    • @naf9392
      @naf9392 5 месяцев назад

      @@thiagorodrigo1498 Existem vários bancos de dados NoSQL

  • @arthurschur
    @arthurschur 5 месяцев назад

    Mano pode ensinar sobre rest api e como construir uma pra CRUD?

  • @rafael_tg
    @rafael_tg 5 месяцев назад

    Valeu pelo video. To escrevendo um código para avaliar equações, tipo inputs-> expression = "altura*2 + largura + 4", values = {"altura":12, "largura":21}. No começo ia usar eval direto mas corre o risco do usuário fazer maldade também kkkk. Sabe se tem risco em usar ast.parse(expression, mode='eval') e verificar a instancia de cada node?

  • @joaomenezes8
    @joaomenezes8 5 месяцев назад

    Galeguinho, muito bom o vídeo. Qual app você tá usando pra gravar?

    • @matheusverri3402
      @matheusverri3402 5 месяцев назад

      Fala meu amigo! Estou procurando a ferramenta que ele usa para deixar a câmera ao lado da gravação da tela. Sabe me dizer qual é?

  • @sama_gotec
    @sama_gotec 5 месяцев назад

    Eu sempre usei ORM no Nodejs, especificamente o Sequelize. Para noSQL, uso Mongoose de ODM. E sinceramente, depois que descobri isso, não consigo viver sem, fazer SQL direto no código, nunca mais. kkkkk

    • @minimovzEt
      @minimovzEt 5 месяцев назад

      não escrever SQL pode ser suficiente para um CRUD, pra fazer operações de ETL é outra história.

  • @Brunoaugustosp
    @Brunoaugustosp 5 месяцев назад

    essa lib bleach foi descontinuada?

  • @felipembraga
    @felipembraga 5 месяцев назад

    Qual software voce usa para essas apresentações?
    Valeu! Otimo conteúdo

  • @kevingood10
    @kevingood10 5 месяцев назад

    hj é dificil ter sql injection pq td mundo usa orm ou algum querybuioder

  • @CrustyMusty101
    @CrustyMusty101 5 месяцев назад

    Quando você escrever sql, basta jogar água sanitária em cima. Entendi!

  • @kevingood10
    @kevingood10 5 месяцев назад

    isso tinha mt no php kkkk

  • @kacyos_kleyton
    @kacyos_kleyton 5 месяцев назад

    eu dps de ver esse vid: '-'

  • @reznew2661
    @reznew2661 5 месяцев назад +1

    só da os chola defendendo ORM nesses comentários. deus me livre

    • @joelmattos7276
      @joelmattos7276 5 месяцев назад

      SIM KKKKK

    • @PintoDonald
      @PintoDonald 5 месяцев назад +1

      Ué, mas usar ORM ou não vai depender de cada projeto. Um bom arquiteto deve saber quando ou não usar

    • @FWCODING
      @FWCODING 5 месяцев назад +1

      Projeto pequeno e facil abstração, dahora usar, projeto complexo e grande, ja fica osso, porque representar queries em forma de objetos fica meio paia, eu diria que é 80/20...

    • @PintoDonald
      @PintoDonald 5 месяцев назад

      @@FWCODING mas lembrando que ORM também permite executar queries mais complexas na mão

    • @pauloabreu4912
      @pauloabreu4912 5 месяцев назад +2

      @@FWCODING "representar queries em forma de objetos fica meio paia", O contrário disso é uma economia porca, simplesmente inserir no banco de dados pode ser mais rápido, mas vai ficar muito desorganizado com o tempo, e o ORM também permite executar querie SQL pra casos específicos.