YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Portuguese, Brazilian subtitles

← Bobby Tables Destroyer of Posts - Intro to Relational Databases

Get Embed Code
4 Languages

Showing Revision 4 created 06/20/2016 by Udacity Robot.

  1. Adaptando nosso código de banco de dados de formulários
    para usar um banco de dados reais,
  2. você deve ter escrito algo
    que se parece muito com isto.
  3. Na função get all posts, você
    se conecta a um banco de dados, cria um cursor,
  4. executa uma instrução SELECT,
    formata os resultados corretamente,
  5. fecha a conexão, retorna as postagens.
  6. Mas, em seguida, para adicionar uma postagem,
    conecte-se ao banco de dados, crie um cursor.
  7. Execute um INSERT que
    faça substituições no conteúdo da postagem,
  8. confirme isso no banco de dados e feche.
  9. Parece bom,
    mas não está perfeito.
  10. Se você estiver escrevendo vários
    aplicativos de fórum diferentes.
  11. Existem algumas postagens que parecem
    não estar funcionando corretamente?
  12. Quer saber?
  13. Espere um minuto.
  14. Esta parecia ser uma postagem totalmente perfeita.
  15. Por que ela está causando este
    erro estranho?
  16. Vamos voltar ao nosso terminal.
  17. Ah, veja só isso.
  18. Temos um rastreamento do Python.
  19. Ele diz erro de programação.
  20. Erro de sintaxe no t ou próximo a ele.
  21. E ainda existem os VALORES da instrução de INSERÇÃO.
  22. Não consigo achar um problema.
  23. Vamos olhar novamente o código.
  24. É aqui que o conteúdo da postagem
    é enviado para o banco de dados.
  25. Ele apenas é adicionado a uma instrução SQL.
  26. Dentro de aspas simples.
  27. Porque colocamos strings SQL
    dentro de aspas simples.
  28. Mas o banco de dados vê as aspas da
    postagem e pensa que elas são o fim de
  29. uma string, e isso é
    algo que ele não entende.
  30. A propósito,
    se o seu código não tiver esse bug,
  31. parabéns, isso é maravilhoso.
  32. Mas fique atento, pois existem mais coisas
    a respeito desse bug que podem não aparecer à primeira vista.
  33. Apesar de termos tido um pequeno
    problema, ainda conseguimos postar coisas.
  34. Desde que elas não tenham
    aspas simples.
  35. Aqui está uma opção para você experimentar.
  36. Aspas simples.
  37. Parâmetro de fechamento.
  38. Ponto-e-vírgula.
  39. Não redigite isso daqui.
  40. Copie das notas do instrutor e
    cole em seu fórum.
  41. Exclua das postagens.
  42. Ponto-e-vírgula.
  43. Traço duplo.
  44. Poste isto.
  45. Espere, todas as nossas postagens sumiram.
  46. Pensei que tínhamos um banco de dados aqui.
  47. Ei, espere um minuto.
  48. Pensei ter visto este aqui
    no webcomic XKCD.
  49. O que temos aqui é um furo de segurança
    chamado de ataque de injeção SQL.
  50. Parte do texto da postagem está sendo
    tratada como um comando de banco de dados,
  51. ou seja, delete from posts.
  52. Isso significa excluir
    cada linha da tabela de postagens.
  53. Bem, isso é desagradável.
  54. Todas aquelas postagens de teste brilhantes
    que escrevemos sumiram, e
  55. temos um famoso bug de segurança
    em nosso código.
  56. Como vamos corrigir isso?
  57. Bem, talvez não seja possível
    recuperar todas aquelas ótimas postagens, mas
  58. devemos conseguir pelo menos
    evitar que isso aconteça de novo.