Identificação
- Duração: 2 horas
- Tipo: auditoria guiada e correção
- Entrega: relatório de auditoria da landing page
- Lista de verificação:
../materiais/checklist-auditoria-web.md - Auditoria de referência:
../exemplos/aula-1.5/relatorio-auditoria.md
Introdução
O que é DevTools?
DevTools é o conjunto de ferramentas de desenvolvimento incluído nos navegadores. Ele permite inspecionar o HTML renderizado, descobrir quais regras CSS foram aplicadas, acompanhar requisições, ler erros e depurar JavaScript.
Normalmente pode ser aberto pelo menu do navegador ou por um atalho de teclado. Ele não modifica permanentemente os arquivos do servidor: alterações feitas durante a inspeção são temporárias.
Qualquer pessoa pode abrir o DevTools?
Sim. O código enviado ao navegador pode ser observado pelo usuário. Por isso, nunca devemos considerar HTML, CSS ou JavaScript do front-end como secretos.
Uma chave de API colocada no JavaScript do navegador pode ser encontrada. Ocultar um botão com CSS também não substitui autorização no servidor.
Usar DevTools é “hackear”?
Inspecionar uma aplicação própria ou um ambiente autorizado faz parte do desenvolvimento. A ferramenta também pode ser usada para estudar problemas de acessibilidade, desempenho e segurança.
Ter acesso ao DevTools não concede autorização para atacar sistemas, acessar contas ou explorar serviços de terceiros.
O que significa segurança nesta aula?
Segurança significa reduzir riscos previsíveis:
- não expor credenciais;
- validar entradas;
- não confiar no navegador para autorização;
- evitar inserção insegura de conteúdo;
- controlar recursos carregados;
- registrar e corrigir falhas.
Acessibilidade, desempenho e segurança não são ajustes finais. São critérios de qualidade que acompanham todo o desenvolvimento.
Objetivos
Ao final da aula, o aluno deverá conseguir:
- utilizar DevTools para investigar uma página;
- identificar requisições, status e recursos;
- analisar erros e avisos no console;
- inspecionar elementos, estilos e acessibilidade;
- testar navegação por teclado;
- detectar rolagem horizontal;
- reconhecer problemas básicos de desempenho;
- identificar exposições comuns de dados e credenciais;
- compreender a função inicial de uma Content Security Policy;
- registrar evidências e priorizar correções.
Pré-requisitos
- landing page semântica;
- CSS responsivo;
- formulário controlado por JavaScript;
- noções de HTTP, DOM e eventos.
Pergunta orientadora
Como demonstrar, com evidências, que uma página funciona corretamente além de apenas “parecer pronta”?
Roteiro sugerido
| Etapa | Duração |
|---|---|
| Preparação e critérios | 10 min |
| Elements e estilos | 15 min |
| Network e Console | 20 min |
| Acessibilidade e teclado | 25 min |
| Desempenho e responsividade | 20 min |
| Segurança básica | 20 min |
| Relatório e priorização | 10 min |
1. Auditoria baseada em evidências
Uma revisão técnica não deve terminar em “funcionou para mim”.
Uma evidência pode ser:
- status HTTP;
- captura de tela;
- mensagem do console;
- sequência reproduzível;
- medida de largura;
- elemento do DOM;
- resultado de um teste;
- comparação antes e depois.
Cada achado deve responder:
- o que foi observado;
- como reproduzir;
- qual é o impacto;
- qual é a prioridade;
- como corrigir;
- como confirmar a correção.
2. Painéis principais do DevTools
Os nomes podem variar entre navegadores, mas os conceitos permanecem.
| Painel | Uso |
|---|---|
| Elements | HTML renderizado, estilos e acessibilidade |
| Console | erros, avisos e mensagens |
| Network | requisições, status, tamanho e tempo |
| Sources | arquivos carregados e depuração |
| Application | armazenamento e recursos do navegador |
| Performance | execução, renderização e tarefas |
| Lighthouse ou auditorias | diagnóstico automatizado complementar |
Ferramentas automatizadas ajudam a encontrar indícios. Elas não substituem testes com teclado, leitura do conteúdo e análise de risco.
3. Elements
Inspeção do DOM
Verifique:
- existe apenas um
main; - o título principal é coerente;
- IDs são únicos;
- rótulos estão associados aos campos;
- elementos interativos possuem nome acessível;
- estados ocultos utilizam o atributo correto;
- não existem elementos interativos aninhados.
Estilos calculados
Utilize a área de estilos para identificar:
- regra aplicada;
- regra sobrescrita;
- arquivo e linha de origem;
- herança;
- box model;
- dimensões finais.
Alterações temporárias
Modificar o CSS no DevTools é útil para experimentar, mas não altera o arquivo original. Registre a decisão e aplique-a no código.
4. Console
O console deve permanecer limpo durante o fluxo principal.
Problemas comuns:
- arquivo não encontrado;
- variável inexistente;
- seletor que retorna
null; - promessa rejeitada sem tratamento;
- política de segurança bloqueando recurso;
- uso de API obsoleta;
- erro provocado por extensão do navegador.
Diferencie origem
Antes de corrigir, confirme se a mensagem vem:
- do seu código;
- do navegador;
- de uma extensão;
- de um recurso de terceiro.
Não esconda erros com um try/catch vazio:
try {
await operation();
} catch {
// Nada acontece
}
Trate a falha e apresente uma resposta segura ao usuário.
5. Network
Recarregue a página com o painel aberto e observe:
- documento HTML;
- CSS;
- JavaScript;
- SVG;
- método;
- status;
- tipo;
- tamanho;
- tempo.
Perguntas
- algum recurso retornou
404? - algum recurso foi redirecionado?
- existe arquivo que não é utilizado?
- recursos são carregados por HTTPS em produção?
- dados pessoais aparecem na URL?
- a página depende de domínio externo?
- o formulário realizou uma requisição inesperada?
Preserve registro
Quando uma navegação ou redirecionamento apagar a lista, utilize a opção de preservar o registro durante a investigação.
6. Depuração
Um breakpoint pausa a execução.
No envio do formulário:
- abra
main.js; - localize o evento
submit; - adicione breakpoint;
- preencha com dados fictícios;
- envie;
- observe
formData,payloade o estado do botão; - continue a execução.
Não capture ou compartilhe valores pessoais durante uma depuração.
7. Acessibilidade por teclado
Teste:
- recarregue a página;
- pressione
Tab; - utilize o link “Pular para o conteúdo”;
- percorra a navegação;
- abra e feche perguntas frequentes;
- preencha o formulário;
- envie com
Enter; - identifique a mensagem de resultado.
Verifique:
- foco sempre visível;
- ordem de foco coerente;
- nenhum foco preso;
- todos os controles alcançáveis;
- conteúdo não depende apenas de hover;
- mensagem de resultado anunciável.
8. Zoom e redimensionamento
Teste:
- 200% de zoom;
- largura de 320 px;
- orientação vertical;
- textos maiores;
- conteúdo longo.
O objetivo não é manter a mesma composição visual, mas preservar:
- leitura;
- funcionalidade;
- ordem;
- foco;
- ausência de sobreposição;
- ausência de perda de conteúdo.
9. Árvore de acessibilidade
A árvore de acessibilidade é derivada do DOM.
Observe:
- papel;
- nome acessível;
- estado;
- descrição;
- relacionamento.
Exemplo:
button "Quero participar"
textbox "Nome"
textbox "E-mail profissional"
combobox "Qual opção representa melhor seu perfil?"
checkbox "Concordo em receber informações..."
status "Cadastro simulado com sucesso"
Se o elemento não possui nome compreensível, revise HTML, rótulo e atributos antes de adicionar ARIA.
10. Desempenho
Problemas iniciais comuns:
- imagens muito maiores que o espaço exibido;
- JavaScript que bloqueia a página;
- fontes externas desnecessárias;
- bibliotecas usadas para tarefas simples;
- layout que muda durante o carregamento;
- arquivos duplicados;
- animações excessivas.
Inspeção inicial
Registre:
- quantidade de requisições;
- tamanho aproximado;
- erros;
- recursos externos;
- estabilidade visual;
- capacidade de interação.
Regra prática
Não otimize sem evidência. Primeiro identifique o gargalo, depois faça uma alteração mensurável.
11. Segurança no front-end
O navegador é um ambiente controlado pelo usuário. Tudo que chega ao front-end pode ser observado.
Nunca coloque no código do navegador:
- chaves privadas;
- senha de banco;
- token administrativo;
- credencial de provedor de IA;
- regra de autorização considerada secreta;
- dado sensível desnecessário.
Validação
Validação no navegador melhora a experiência, mas pode ser alterada ou removida pelo usuário. O back-end deverá validar novamente.
Front-end valida para ajudar.
Back-end valida para proteger.
XSS
Evite inserir entrada externa com innerHTML.
status.textContent = message;
Quando HTML dinâmico for indispensável, será necessário um processo adequado de sanitização.
Dados em URLs
URLs podem aparecer em:
- histórico;
- registros;
- favoritos;
- analytics;
- cabeçalhos de referência.
Não coloque senha, token ou dado sensível em cadeias de consulta.
12. Content Security Policy
Uma Content Security Policy, ou CSP, restringe as origens autorizadas para recursos e execução.
Na página estática de laboratório:
<meta
http-equiv="Content-Security-Policy"
content="
default-src 'self';
img-src 'self';
style-src 'self';
script-src 'self';
object-src 'none';
base-uri 'none';
form-action 'self';
"
>
Essa versão:
- permite recursos da mesma origem;
- bloqueia plugins embutidos;
- impede alteração de URL base;
- restringe o destino do formulário.
Em produção, a política normalmente é enviada como cabeçalho HTTP. Uma política precisa ser adaptada aos recursos reais e testada antes de ser aplicada de forma restritiva.
13. Referrer Policy
A política de referência controla parte das informações enviadas ao navegar para outro endereço.
<meta name="referrer" content="strict-origin-when-cross-origin">
Ela não substitui a decisão de evitar dados sensíveis na URL.
14. Armazenamento do navegador
Inspecione cookies, localStorage e sessionStorage.
Pergunte:
- por que o dado está armazenado?
- por quanto tempo?
- quem consegue acessá-lo?
- ele é sensível?
- pode ser removido?
A Knowledge AI não grava nome ou e-mail no armazenamento local.
15. Auditoria da Knowledge AI
Execute:
Estrutura
- título e descrição;
- landmarks;
- hierarquia de títulos;
- rótulos;
- texto alternativo;
- idioma.
Interação
- envio inválido;
- sucesso;
- erro simulado;
- recuperação;
- teclado.
Responsividade
- 320 px;
- 375 px;
- 768 px;
- 1280 px;
- ausência de rolagem horizontal.
Recursos
- HTML;
- CSS;
- JavaScript;
- SVG;
- status HTTP;
- console.
Segurança
- ausência de credenciais;
- ausência de dados em registros;
textContent;- CSP inicial;
- destino de formulário restrito;
- sem armazenamento de dados pessoais.
16. Priorização
Utilize:
| Prioridade | Definição |
|---|---|
| Crítica | exposição de dados, credenciais ou controle indevido |
| Alta | impede fluxo essencial ou acesso |
| Média | degrada experiência, compreensão ou manutenção |
| Baixa | melhoria sem impacto imediato relevante |
Corrija primeiro segurança e bloqueios de fluxo.
17. Modelo de achado
### A-01 - Foco invisível
- Prioridade: alta
- Área: acessibilidade
- Evidência: ao navegar com Tab, não é possível identificar o link ativo
- Impacto: usuários de teclado perdem a posição
- Correção: adicionar estilo para `:focus-visible`
- Validação: repetir o fluxo completo usando apenas teclado
18. Exercício de fixação
Audite uma página anterior ou outro pequeno projeto.
Registre no mínimo:
- um achado de acessibilidade;
- um achado de desempenho;
- um achado de segurança;
- uma evidência de funcionamento correto;
- prioridade;
- correção proposta.
19. Desafio individual
Remova temporariamente o arquivo main.js da referência no HTML.
Observe:
- Network;
- Console;
- comportamento do formulário;
- experiência do usuário.
Depois restaure o arquivo e documente:
- como o problema foi detectado;
- qual foi a evidência;
- qual foi a causa;
- como foi validada a correção.
Não deixe a referência removida na entrega final.
20. Erros comuns
Corrigir somente o sintoma
Um 404 não deve ser ocultado. Corrija o caminho ou remova a referência.
Confiar apenas em pontuação automática
Uma nota alta não garante usabilidade, segurança ou conteúdo correto.
Testar somente com mouse
Inclua teclado em todo fluxo.
Ignorar mensagens do console
Mesmo que a interface pareça funcionar, um erro pode indicar fluxo incompleto.
Aplicar CSP sem testar
Uma política incorreta pode bloquear CSS, JavaScript, imagens ou integrações legítimas.
Expor dados em captura
Utilize dados fictícios e revise evidências antes de compartilhá-las.
Otimizar sem medir
Registre o antes e o depois.
21. Lista de verificação de entrega
- O fluxo principal foi testado.
- O console não apresenta erros da aplicação.
- Todos os recursos retornam sucesso.
- A navegação funciona por teclado.
- O foco é visível.
- O formulário comunica sucesso e erro.
- Não existe rolagem horizontal em 320 px.
- A página funciona com zoom.
- Não existem credenciais no front-end.
- Dados pessoais não aparecem na URL ou console.
- O armazenamento do navegador foi inspecionado.
- A CSP foi compreendida e testada.
- Os achados possuem evidências.
- Correções foram revalidadas.
22. Critérios de aceite
A entrega será aceita quando:
- apresentar um relatório reproduzível;
- incluir evidências de rede e console;
- testar teclado e responsividade;
- classificar prioridades;
- registrar correções;
- repetir os testes após as correções;
- não expor dados pessoais;
- explicar por que a validação do front-end não protege o back-end;
- explicar a finalidade de uma CSP;
- demonstrar o fluxo principal sem erros.
23. Perguntas para revisão
- Qual é a diferença entre DOM original e DOM renderizado?
- O que deve ser observado no painel Network?
- Como diferenciar um erro da aplicação de um erro de extensão?
- Por que o teste por teclado é indispensável?
- O que a árvore de acessibilidade representa?
- Por que validação no navegador não é suficiente?
- Qual risco existe ao utilizar
innerHTMLcom entrada externa? - Para que serve uma CSP?
- Por que dados sensíveis não devem aparecer em URLs?
- O que torna um relatório de auditoria reproduzível?
Próxima aula
Na Aula 1.6, o projeto será versionado, documentado, publicado e apresentado. O aluno concluirá o primeiro módulo com uma entrega de portfólio.