Capítulo 4 — Programação I
Mapa da aula
Aula 04 publicada. Mapa, exemplo, EX010.
flowchart TD
N0["4.1 Primeiros scripts"]
N1["4.2 Entradas não confiáveis"]
N2["4.4 Lendo código com olhar crítico"]
N0 --> N1 --> N2
N2 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX010"]
Desenho lógico
flowchart LR
N0["4.1 Primeiros scripts"]
N1["4.2 Entradas não confiáveis"]
N2["4.4 Lendo código com olhar crítico"]
N0 --> N1 --> N2 --> Q["EX010"]
[4.1 Primeiros scripts]
|
v
[4.2 Entradas não confiáveis]
|
v
[4.4 Lendo código com olhar crítico]
|
v
[Exemplo resolvido] --> [Exercício EX010]
Objetivos de aprendizagem
Você vai (1) escrever Python simples para processar dados de segurança; (2) validar entradas não confiáveis; (3) tratar erros sem escondê-los.
4.1 Primeiros scripts
Lindiwe escreve seus primeiros scripts em Python sobre dados sintéticos da Saltmarsh. Um deles lê uma lista de contas de usuário e conta as que não têm login há noventa dias, candidatas à desativação. Ela usa apenas a biblioteca padrão, para que o script rode na máquina de qualquer analista sem instalar pacotes. O Prof. Hale pede que ela imprima as contagens com rótulos claros, porque um relatório de segurança que diz apenas 37, sem contexto, será mal entendido pelos gerentes que o recebem. O script encontra trinta e sete contas inativas no arquivo sintético.
4.2 Entradas não confiáveis
As entradas vindas de fora de um programa não podem ser confiáveis. Lindiwe escreve uma função que aceita um código de depósito digitado por um usuário e o confere contra os doze códigos válidos antes de usá-lo num caminho de arquivo. Sem essa verificação, uma entrada com sequências de ponto-ponto-barra poderia fazer o programa ler arquivos fora da sua pasta. Ela aprende que validar a entrada contra uma lista de permissões, em vez de tentar bloquear padrões ruins conhecidos, é o padrão mais seguro. Ela testa a função com dez códigos deliberadamente malformados.
4.3 Erros e logs
Os programas falham, e a forma como falham importa. O primeiro script de Lindiwe parava silenciosamente quando uma linha do arquivo de contas estava malformada. Ela o reescreve para registrar o número da linha e o motivo, pular a linha ruim e relatar ao final a contagem de linhas puladas. O Prof. Hale explica que as falhas silenciosas são perigosas nas ferramentas de segurança, porque uma varredura que pula em silêncio metade dos seus alvos ainda produz um relatório tranquilizador. No arquivo sintético, a nova versão pula três linhas malformadas e as relata pelo número, para que o dono dos dados possa corrigir os registros de origem.
4.4 Lendo código com olhar crítico
Lindiwe lê um script curto que um colega escreveu para redefinir senhas. Ele monta um comando de shell juntando strings que incluem o nome de usuário. Ela percebe que um nome de usuário contendo um ponto e vírgula poderia injetar um segundo comando. Ela sugere passar os argumentos como uma lista ao módulo subprocess, para que nenhum shell os interprete. O Prof. Hale diz que revisar o código dos outros em busca desses padrões é um dos hábitos mais valiosos que um engenheiro pode construir cedo. O colega concorda, atualiza o script e pede que ela revise o próximo.
Exemplo resolvido
Lindiwe escreve scripts com a biblioteca padrão e saída rotulada, valida os códigos de depósito contra uma lista de permissões, registra as linhas puladas e identifica um risco de injeção de comandos.
Caso sintético. Os scripts e os dados são sintéticos.
Erros e limites
Bloquear entradas ruins conhecidas é mais fraco do que permitir apenas entradas boas conhecidas.
Exercícios
-
EX010 — Contas inativas. O que o primeiro script conta? Rubrica: 3 = contas sem login há noventa dias;; 2 = parcialmente correto;; 1 = vago;; 0 = nenhuma.
-
EX011 — Lista de permissões. Como o código de depósito é validado? Rubrica: 3 = contra os doze códigos válidos;; 2 = parcialmente correto;; 1 = vago;; 0 = nenhuma.
-
EX012 — Correção da injeção. Como o script de redefinição deve chamar os comandos? Rubrica: 3 = passar os argumentos como uma lista;; 2 = parcialmente correto;; 1 = vago;; 0 = nenhuma.
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.