Capítulo 4 — Programação I
Mapa da aula
Aula 04 publicada. Mapa, exemplo, EX010.
flowchart TD
N0["4.1 Programas que verificam a entrada"]
N1["4.3 A biblioteca padrão primeiro"]
N2["Síntese"]
N0 --> N1 --> N2
N2 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX010"]
Desenho lógico
flowchart LR
N0["4.1 Programas que verificam a entrada"]
N1["4.3 A biblioteca padrão primeiro"]
N2["Síntese"]
N0 --> N1 --> N2 --> Q["EX010"]
[4.1 Programas que verificam a entrada]
|
v
[4.3 A biblioteca padrão primeiro]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX010]
Objetivos de aprendizagem
Você vai (1) escrever programas pequenos e legíveis que validam a entrada; (2) tratar erros sem vazar detalhes sensíveis; (3) usar a biblioteca padrão em vez de reinventar funções de segurança.
4.1 Programas que verificam a entrada
O primeiro curso de programação de Sofia usa Python. Daniel pede que ela escreva um parser para registros sintéticos de validação de passagens: identificador do cartão, identificador do validador, timestamp e valor. Sua primeira versão confia em todos os campos. Ele lhe dá linhas malformadas, como um valor negativo, um timestamp no futuro e um identificador de cartão com caracteres inesperados, e o programa ou trava ou aceita absurdos. Ela o reescreve para validar cada campo contra um padrão de allow-list e uma faixa, rejeitando a linha com um motivo. A validação de entrada nas fronteiras é um dos hábitos mais básicos de projeto seguro, e começa nos primeiros programas que um estudante escreve.
4.2 Erros sem vazamentos
Quando a validação falha, o programa precisa relatar o suficiente para que um operador corrija o problema, mas sem expor segredos ou detalhes internos a quem forneceu a entrada. Sofia separa duas mensagens: um erro público curto, como registro inválido, e uma entrada detalhada de log interno com o número da linha e o motivo, gravada num arquivo com permissões restritas. Ela evita mostrar stack traces aos usuários. Daniel explica que erros verbosos em serviços web já revelaram nomes de bancos de dados, caminhos de arquivos e versões a atacantes, entregando-lhes um mapa. O tratamento de erros faz parte da interface e merece o mesmo cuidado de projeto.
4.3 A biblioteca padrão primeiro
Sofia precisa de identificadores aleatórios para cartões de teste. Primeiro ela usa o módulo random e depois aprende que, para qualquer coisa relevante para a segurança, o módulo secrets do Python é obrigatório, porque ele obtém os valores da fonte segura do sistema operacional. Ela também precisa comparar uma tag de autenticação e aprende a usar hmac.compare_digest. A regra de Daniel é simples: use a biblioteca padrão ou um pacote bem mantido para funções de segurança, leia sua documentação e nunca escreva você mesmo uma cifra, um hash ou um gerador aleatório. A habilidade em programação se mostra ao compor corretamente partes confiáveis, e não ao recriá-las.
Exemplo resolvido
Sofia reescreve um parser de registros de passagem com validação por allow-list, mensagens de erro públicas e internas separadas e identificadores de teste gerados com secrets.
Caso sintético. Os registros, formatos e identificadores são sintéticos.
Erros e limites
As allow-lists precisam de manutenção quando os formatos mudam. Os logs internos ainda podem vazar se suas permissões ou sua retenção estiverem erradas.
Exercícios
-
EX010 — Três campos malformados. Cite três entradas malformadas que Daniel usou para quebrar o primeiro parser de Sofia. Rubrica: 3 = valor negativo, timestamp no futuro, identificador de cartão com caracteres inesperados;; 2 = duas;; 1 = uma;; 0 = nenhuma.
-
EX011 — Duas mensagens. Que dois tipos de mensagem de erro Sofia produz? Rubrica: 3 = mensagem pública curta e log interno detalhado com acesso restrito;; 2 = as duas;; 1 = stack trace;; 0 = nenhuma.
-
EX012 — Módulo secrets. Por que os identificadores de cartões de teste devem usar secrets em vez de random? Rubrica: 3 = secrets usa a fonte segura do sistema operacional; random é previsível;; 2 = fonte segura;; 1 = nenhuma diferença;; 0 = nenhuma.
Síntese
Os primeiros programas ensinam segurança quando validam as entradas, mantêm internos os detalhes de erro e se apoiam em funções de bibliotecas avaliadas.
Continue estudando — aula 04 (capítulo 04 de 50)
← Capítulo 03 · Índice das aulas · Capítulo 05 →
Continue para a próxima aula já escrita.