◇ OpenCyber Academy
Graduação · Capítulo 8 · Português

Capítulo 8 — Programação II

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

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

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.