Mapa da aula
Aula 12 publicada. Mapa, exemplo, EX034.
flowchart TD
N0["12.1 SDKs"]
N1["12.2 Resultados"]
N2["12.3 Recomendações"]
N3["12.4 Acompanhamento"]
N4["Laboratório — Fluxos de dados dos SDKs e sua cobertu"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX034"]
Desenho lógico
flowchart LR
N0["12.1 SDKs"]
N1["12.2 Resultados"]
N2["12.3 Recomendações"]
N3["12.4 Acompanhamento"]
N4["Laboratório — Fluxos de dados dos SDKs e sua cobertu"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX034"]
[12.1 SDKs]
|
v
[12.2 Resultados]
|
v
[12.3 Recomendações]
|
v
[12.4 Acompanhamento]
|
v
[Laboratório — Fluxos de dados dos SDKs e sua cobertu]
|
v
[Exemplo resolvido] --> [Exercício EX034]
Objetivos de aprendizagem
Você vai (1) inspecionar os SDKs embutidos num aplicativo; (2) conferir a cobertura pelo aviso e pelos contratos; (3) recomendar mudanças.
12.1 SDKs
O aplicativo da Quayside embute cinco kits de desenvolvimento de software (SDKs). Um SDK é uma biblioteca fornecida por outra empresa e incluída no aplicativo para oferecer uma funcionalidade, como relatórios de falhas ou chat, e pode coletar dados sem que a equipe do aplicativo perceba. Aisha gera uma versão de teste, entra com alunos sintéticos e registra o tráfego de rede enquanto usa treinos, aulas e chat. Depois lista cada SDK, os campos que ele recebe e se o aviso de privacidade e os contratos o cobrem, para comparar o que o aplicativo diz com o que de fato envia.
12.2 Resultados
O laboratório mostra que os SDKs de relatório de falhas, análise de uso e chat de atendimento estão cobertos pelo aviso e pelos contratos. A rede de anúncios recebe o identificador de publicidade, a zona cardíaca e a localização, e não está no aviso nem tem contrato. O login social não tem contrato. A zona cardíaca deriva de dados de saúde, e enviá-la com identificador de publicidade e localização permite montar um perfil do condicionamento e dos deslocamentos do aluno; é o achado mais grave. Os desenvolvedores contam que o SDK veio com uma funcionalidade de promoções dois anos antes e ninguém revisou sua coleta.
12.3 Recomendações
Aisha recomenda remover o SDK da rede de anúncios, assinar um contrato com o provedor de login social e atualizar o aviso de privacidade. Recomenda também uma regra: nenhum SDK entra sem revisão de privacidade. Cada recomendação tem responsável e data: a equipe do aplicativo remove o SDK, compras cuida do contrato do login social e o encarregado atualiza o aviso. Ela pede ainda à equipe do aplicativo que mantenha no repositório uma lista de todos os SDKs, com versão e finalidade, para que as revisões futuras partam de um registro exato, e não da memória de alguém.
12.4 Acompanhamento
A equipe do aplicativo remove o SDK de anúncios na versão seguinte. Aisha testa de novo, com as mesmas contas sintéticas e os mesmos passos, para que os resultados possam ser comparados diretamente, e confirma que nenhum dado de frequência cardíaca sai para anunciantes. O tráfego para a rede de anúncios desapareceu, e o contrato do login social é assinado em um mês. Aisha acrescenta à lista de verificação de cada versão uma pergunta simples aos desenvolvedores: esta versão acrescenta ou atualiza alguma biblioteca de terceiros que envia dados para fora do aparelho? O Sr. Reilly observa que a revisão deve se repetir a cada versão.
Laboratório — Fluxos de dados dos SDKs e sua cobertura
# Fitness app: what does each embedded SDK receive, and is it covered by the privacy notice and a contract?
sdks = [("crash reporter", ["device model", "app version"], True, True),
("analytics", ["member id", "screen views", "workout type"], True, True),
("ad network", ["advertising id", "heart rate zone", "location"], False, False),
("chat support", ["member id", "name", "messages"], True, True),
("social login", ["email", "name"], True, False)]
for name, data, notice, contract in sdks:
issues = ([] if notice else ["not in notice"]) + ([] if contract else ["no contract"])
health = any(d in ("heart rate zone",) for d in data)
print(f"{name:15s} {', '.join(data):40s} {'OK' if not issues else '; '.join(issues)}{' [HEALTH DATA]' if health else ''}")
Execute com python3 lab_flows.py. Saída verificada:
crash reporter device model, app version OK
analytics member id, screen views, workout type OK
ad network advertising id, heart rate zone, location not in notice; no contract [HEALTH DATA]
chat support member id, name, messages OK
social login email, name no contract
Exemplo resolvido
Aisha descobre que a rede de anúncios recebe a zona cardíaca e a localização sem aviso nem contrato e que o login social não tem contrato, e o SDK de anúncios é removido.
Caso sintético. Os SDKs são sintéticos.
Erros e limites
A inspeção de rede pode deixar escapar dados enviados mais tarde ou em lotes.
Exercícios
- EX034 — Pior SDK. Que SDK é o achado mais grave?
Mostrar critérios de avaliação
Rubrica: 3 = a rede de anúncios, que recebe zona cardíaca e localização sem aviso nem contrato;; 2 = cita-o;; 1 = outro;; 0 = nenhuma. - EX035 — Lacuna do login social. Que lacuna o login social tem?
Mostrar critérios de avaliação
Rubrica: 3 = não tem contrato;; 2 = parcialmente correta;; 1 = vago;; 0 = nenhuma. - EX036 — Regra para SDKs. Que regra Aisha recomendou?
Mostrar critérios de avaliação
Rubrica: 3 = nenhum SDK entra sem revisão de privacidade;; 2 = menciona revisão;; 1 = vago;; 0 = nenhuma.