Capítulo 8 — Programação II
Mapa da aula
Aula 08 publicada. Mapa, exemplo, EX022.
flowchart TD
N0["8.1 Um pequeno serviço"]
N1["8.2 Testar as regras de acesso"]
N2["8.3 Registrar de forma útil"]
N3["Síntese"]
N0 --> N1 --> N2 --> N3
N3 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX022"]
Desenho lógico
flowchart LR
N0["8.1 Um pequeno serviço"]
N1["8.2 Testar as regras de acesso"]
N2["8.3 Registrar de forma útil"]
N3["Síntese"]
N0 --> N1 --> N2 --> N3 --> Q["EX022"]
[8.1 Um pequeno serviço]
|
v
[8.2 Testar as regras de acesso]
|
v
[8.3 Registrar de forma útil]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX022]
Objetivos de aprendizagem
Você vai (1) construir um pequeno serviço web com autenticação e autorização; (2) escrever testes para regras de controle de acesso; (3) registrar de forma útil os eventos relevantes para a segurança.
8.1 Um pequeno serviço
Em Programação II, Lucas constrói um serviço sintético de consulta de estoque para a equipe das lojas, usando o servidor HTTP da biblioteca padrão do Python para fins de aprendizado. A equipe faz login e depois consulta os níveis de estoque; os gerentes também podem ajustar o estoque. Ele separa a autenticação, que estabelece quem é o usuário, da autorização, que decide o que esse usuário pode fazer. Cada requisição verifica as duas. Ele aprende que misturá-las causa bugs, como verificar apenas que um usuário está logado e esquecer de verificar se ele é gerente antes de permitir um ajuste.
8.2 Testar as regras de acesso
Lucas escreve testes para cada combinação de papel e ação: a equipe pode consultar, a equipe não pode ajustar, os gerentes podem fazer as duas coisas, usuários anônimos não podem fazer nenhuma. Ele também testa casos-limite, como um gerente de uma loja ajustando o estoque de outra loja, o que as regras proíbem. Um teste falha: o serviço verifica o papel de gerente, mas não a loja. Ele corrige a verificação e o teste passa. Testar as regras de acesso como uma matriz torna visíveis as verificações ausentes, e esses testes depois protegem a regra quando alguém modifica o código.
8.3 Registrar de forma útil
O serviço registra logins, logins com falha, ajustes de estoque e falhas de autorização, com usuário, horário, ação e resultado, mas nunca senhas ou tokens de sessão. Lucas aprende que os logs servem às investigações, então cada entrada precisa responder quem fez o quê, quando e com que resultado. Ele também aprende a evitar registrar dados pessoais em excesso. Hannah revisa seu desenho de logs e pede um identificador de correlação para cada requisição, para que os eventos de diferentes serviços possam ser ligados durante um incidente. Um logging útil é projetado pensando em quem vai lê-lo no futuro.
Exemplo resolvido
Lucas constrói um serviço de estoque que separa a autenticação da autorização, encontra uma verificação de loja ausente por meio de uma matriz de testes de papel e ação e projeta logs com identificadores de correlação.
Caso sintético. O serviço, os papéis e as lojas são sintéticos.
Erros e limites
Servidores da biblioteca padrão servem para aprender; a produção usa frameworks mantidos. As matrizes de testes crescem rapidamente com os papéis e os recursos.
Exercícios
-
EX022 — AuthN versus AuthZ. Qual é a diferença entre autenticação e autorização? Rubrica: 3 = a autenticação estabelece a identidade; a autorização decide as ações permitidas;; 2 = as duas;; 1 = iguais;; 0 = nenhuma.
-
EX023 — Teste que falhou. Que teste falhou, e por quê? Rubrica: 3 = gerente ajustando o estoque de outra loja; a loja não era verificada;; 2 = nomeado;; 1 = vago;; 0 = nenhuma.
-
EX024 — Nunca registrado. O que nunca pode aparecer nos logs? Rubrica: 3 = senhas ou tokens de sessão;; 2 = os dois;; 1 = nomes de usuário;; 0 = nenhuma.
Síntese
Serviços seguros separam identidade de permissão, testam cada combinação de regras e registram em log o que os investigadores vão precisar.
Continue estudando — aula 08 (capítulo 08 de 40)
← Capítulo 07 · Índice das aulas · Capítulo 09 →
Continue para a próxima aula já escrita.