HIPERLINKS (LINKS) - <a>
Os hiperlinks permitem que o usuário navegue de um documento para outro.
O hiperlink (ou link) é um elemento clicável que aponta para um destino, definido pelo atributo href. Esse destino pode ser uma página, um arquivo, uma seção do próprio site, um e-mail ou qualquer recurso acessível na web.
O link é definido pela tag <a>, exemplo:
<a atributo="valor"> conteúdo </a>
<a href="link.html"> Link Interno </a>
<a href="https://www.link.com/"> Link Externo </a>
URLs ABSOLUTA E URLs RELATIVA
Quando você escreve um href, você está dizendo ao navegador como chegar a um recurso.
Existem dois modos mentais de fazer isso:
- “A partir de onde estou agora” → caminho relativo
- “Endereço completo, sem ambiguidade” → caminho absoluto
URL ABSOLUTA
Um URL absoluto é um endereço completo da internet que contém o URL completo e que inclui o protocolo (https://):
<a href="https://www.bibliotecadasalmas.com/ensino-tecnologico/html/hiperlinks.html">Hiperlinks</a>
URL RELATIVA
É um link local, direcionado para uma página dentro do mesmo site. São mais seguro e confiavel.
<a href="/ensino-tecnologico/html/hiperlinks.html">Hiperlinks</a>
ATRIBUTOS E VALORES DA TAG <a>
<a href="https://www.bibliotecadasalmas.com/" target="_blank" rel="noopener noreferrer"> Visite A Biblioteca Das Almas </a>
- href - é o atributo que indica o destino do link. O texto do link é a parte que ficará invisível para o leitor e ao clicar no link levará o leitor ao endereço de uma URL especifico;
- target - é o atributo que especifica onde abrir o documento vinculado. Exemplos de alguns dos valores no atributo target:
- _self - padrão. Abre o documento na mesma janela/aba em que foi clicado;
- _blank - abre o documento em uma nova janela ou aba;
- _parent - abre o documento no frame principal;
- _top - abre o documento em tela cheia na janela.
- rel - é o atributo que especifica a relação entre o ducumento atual e o documento vinculado:
- external - indica que o documento, referenciado, não faz parte do mesmo site que o documento atual;
- noopener - impede que a aba externa controle a sua;
- noreferrer - impede que a URL original seja enviada.
USANDO IMAGEM COMO LINK
Para usar uma imagem como link, basta colocar a tag <img> dentro da tag <a>:
<a href="URL do link"><img src="URL da imagem" alt="descrição" width:"50" height:"50"></a>
LINK PARA UM ENDEREÇO DE E-MAIL
Utilize o valor mailto: com o e-mail no atributo href para criar um link que abra o programa de e-mail do usuário (para que ele possa enviar um novo e-mail):
<a href="mailto:[email protected]">Enviar Email</a>
BOTÃO COMO LINK
*Para colocar um botão, é indicado utilizar as CSS ou JavaScript.
DICA NO LINK
O atributo title ou abbr title especifica informações adicionais sobre um elemento. Essas informações geralmente são exibidas como um texto de dica quando o mouse passa sobre o elemento.
<a href="URL" title="descrição">texto</a>
- <a title="...">: É usado quando se quer fornecer uma dica adicional, quer explicar para onde o link leva, quer contextualizar a ação do clique, quer adicionar metadado não semântico, apenas informativo:
<a href="URL" title="Entre em contato com a nossa equipe">Contato</a>
<a href="URL" title="Baixar versão em PDF">Download</a>
- <abbr title="...">: dessa forma está adicionando significado ao texto. Os leitores de tela entendem a sigla, buscadores entendem o termo completo, e você segue o padrão semântico do HTML. É usado quando se tem uma sigla, uma abreviação, um acrônimo, uma forma curta de uma expressão maior:
<abbr title="HyperText Markup Language"> HTML </abbr>
<abbr title="Cascading Style Sheets"> CSS </abbr>
CORES NO LINK
Um link é exibido em uma cor diferente dependendo se não foi visitado, foi visitado ou está ativo.
Por padrão, um link aparecerá assim (em todos os navegadores):
- Um link não visitado é sublinhado e azul;
- Um link visitado é sublinhado e roxo;
- Um link ativo é sublinhado e vermelho.
Observação:
- Para melhores detalhes de motificação no estilo visual do link, é indicado HTML-Style ou as CSS-Style.
LINKS FAVORITOS
Os links HTML podem ser usados para criar marcadores, permitindo que os leitores acessem partes especificas de uma página da web.
a) Você marca pontos da página com id:
<h2 id="capitulo-html">HTML</h2>
b) E cria links apontando para esse id:
<a href="/pastas/site.html#capitulo-html">HTML>/a>
<a href="#capitulo-html">HTML>/a>
*O #capitulo-html não é um arquivo, é um endereço interno da página.
NAVEGAÇÃO POR ÂNCORAS INTERMAS (FRAGMENT IDENTIFIERS)
- Um índice no topo;
- Você clica e vai para o “Capítulo 3”;
- A página rola até o ponto exato.
Tudo acontece dentro da mesma página HTML.
SEGURANÇA DE LINK
Um link mal construído pode abrir portas para ataques, principalmente quando envolve:
- Páginas externas;
- Abertura em nova aba;
- Parâmetros na URL;
- Uso de JavaScript no href;
- Links gerados por usuários.
*Leve em consideração que o estudo referente a segurança de link:
- Nem toda medida de segurança que será discutido se aplica a LINKS INTERNOS;
- Link interno herda a segurança da página atual. Se a página estiver segura então o link interno estará.
- Grande parte do que será discutido é específico para LINKS EXTERNOS.
Quando um link, criado, pode ser perigoso?
- "Quando se é utilizado apenas target="_blank"." Exemplo:
<a href="https://exemplo.com" target="_blank"> Visitar </a>
Se você click em um link que abre um site externo, sem a devida proteção, o site externo pode:
- Acessar a aba que abriu o link;
- Modificar a página original;
- Redirecionar a vítima para phishing.
Isso se chama Reverse Tabnabbing.
A proteção obrigatória: rel="noopener noreferrer"
Sempre que for usado o target="_blank", use o rel="noopener noreferrer". Isso elimina o risco de Reverse Tabnabbing.
<a href="https://exemplo.com" target="_blank" rel="noopener noreferrer"> Visitar </a>
- noopener → impede que o site externo controle sua aba;
- noreferrer → impede vazamento de origem.
*O atributo rel não é moda, não é detalhe — é parte da segurança estrutural do HTML moderno.
Quando um link é realmente perigoso?
A) Quando é utilizado no código: href="javascript:..."
Isso é uma brecha enorme. É como se tivesse escrevendo em letra de neon: AQUI O MEU CÓDIGO É VULNERÁVEL, ME INVADA!!!.
<a href="javascript:alert('teste')"> Clique </a>
Isso permite execução de scripts, abrindo portas para XSS, nunca use.
B) Links montados por usuários (comentários, inputs, etc.)
Se em algum momento futuro o seu site permitir que usuários enviem conteúdo, links precisam ser sanitizados.
Mas isso é problema para o back-end.
Estrutura mental e prática da segurança
Segurança em HTML não é “colar atributos”, é pensar como alguém quer tentar quebrar seu site. Se você só escreve HTML bonito e deixa o resto “para depois”, você está construindo uma fachada, não uma casa.
1) Entenda o limite do HTML (erro comum):
O HTML não protege nada sozinho.
O HTML organiza, exibe e orienta o navegador. Segurança real vem da combinação:
- HTML (estrutura segura);
- Navegador (comportamento);
- JavaScript (controle);
- Servidor (autoridade final).
*Se você acha que “bloquear algo no HTML” impede ataques, essa crença já te enfraquece.
2) Princípios fundamentais (antes de qualquer tag):
Princípio da desconfiança:
- Nunca confie em:
- Inputs do usuário;
- URLs;
- Dados vindos do frontend.
- O HTML nunca assume que algo é seguro.
Princípio do mínimo necessário:
- Só permita:
- O que é usado;
- Onde é usado;
- Pelo tempo necessário.
3) Estrutura mínima de um HTML seguro:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Segurança -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self';">
<meta http-equiv="Referrer-Policy" content="no-referrer">
<meta http-equiv="X-Content-Type-Options" content="nosniff">
<title> Site Seguro </title>
</head>
<body>
</body>
</html>
*Mesmo em HTML puro, você já define limites.
Ⅰ) <meta http-equiv="Content-Security-Policy" content="default-src 'self';">
O que faz:
Define uma política de segurança de conteúdo (CSP).
Essa linha diz: - “Este site só pode carregar recursos da própria origem.”
Ou seja:
- nada de scripts externos;
- nada de imagens externas;
- nada de iframes externos;
- nada de fontes externas;
- nada de navegação externas;
- nada de carregamento de recursos externas.
O que isso bloqueia na prática
- XSS (Cross-Site Scripting);
- Scripts injetados;
- Ataques via CDN comprometido;
- Conteúdo malicioso embutido.
Por que isso é poderoso
Mesmo que alguém consiga injetar um <script>:
- o navegador recusa executar
*É uma defesa ativa, não estética.
O custo que quase ninguém menciona
Com essa política:
- Google Fonts quebra;
- YouTube iframe quebra;
- qualquer JS externo quebra.
Ou seja: segurança máxima = liberdade mínima
Ⅱ) <meta http-equiv="Referrer-Policy" content="no-referrer">
O que faz?
Impede que o navegador envie o endereço da sua página ao acessar links externos.
Sem isso:
- o site externo sabe de onde o usuário veio;
- pode ver parâmetros, IDs, caminhos internos.
O que você está protegendo?
- estrutura interna do site;
- parâmetros sensíveis na URL;
- privacidade do usuário.
Exemplo prático:
- Sem no-referrer:
https://siteexterno.com
← recebe →
https://seusite.com/aula/html/seguranca?aluno=123
- Com no-referrer:
siteexterno.com
← recebe →
(nada)
Custo real
- analytics externos perdem referência;
- afiliados quebram;
- métricas ficam menos precisas.
Ⅲ) <meta http-equiv="X-Content-Type-Options" content="nosniff">
O que faz?
Impede que o navegador “adivinhe” o tipo de arquivo.
Sem isso:
- um arquivo .txt pode ser tratado como .js;
- um .jpg pode esconder script.
Com nosniff: “Confie apenas no Content-Type declarado.”
Ataque que isso bloqueia?
- execução de código disfarçado;
- upload malicioso;
- MIME sniffing attacks.
Onde isso é crucial?
- sites com upload;
- servidores mal configurados;
- conteúdo dinâmico.
4) Formulários
Erro comum
- “Coloquei required e pattern, então está seguro.”
Não está!
HTML ajuda, mas não valida
<input type="email" required autocomplete="off">
O HTML:
- orienta;
- não garante.
A validação real acontece:
- No JavaScript (UX);
- No servidor (autoridade).
*Se você confia só no HTML, você está pedindo para ser explorado.
5) Nunca exponha lógica sensível no HTML
Jamais exponha:
- Tokens;
- Chaves;
- URLs privadas;
- Regras de negócio.
Mesmo:
<!-- comentário escondido -->
<!-- endpoint secreto -->
HTML é público por definição.
Se está no HTML: O atacante já leu.
6) JavaScript + HTML: separação é segurança
Misturar tudo (errado):
<button onclick="fazAlgoPerigoso()">Enviar</button>
Estrutura correta:
<button id="enviar">Enviar</button>
<script src="app.js"></script>
Por quê?
- Facilita auditoria;
- Reduz injeções;
- Permite CSP mais rígido.
7) Content Security Policy (CSP) — seu escudo invisível
Exemplo básico:
<meta http-equiv="Content-Security-Policy" content="default-src 'self';script-src 'self';style-src 'self';img-src 'self';">
Isso impede:
- Scripts injetados
- XSS simples
- Execução externa não autorizada
*Se você não usa CSP, você está andando sem cinto.
8) HTTPS não é opcional
Mesmo em HTML puro:
- Sem HTTPS:
- Qualquer Wi-Fi altera seu HTML.
- Com HTTPS:
- Integridade garantida.
Segurança começa antes do HTML chegar ao navegador.
9) Mentalidade final (a parte que mais importa)
Pergunte sempre:
- “Se eu fosse um atacante, onde eu mexeria?”
- “O que estou confiando sem perceber?”
- “Isso está aqui por conveniência ou por necessidade?”
Se você realmente acredita em código limpo e compreensível, então:
- Seu HTML deve ser legível;
- Suas decisões de segurança devem ser explícitas;
- Seus limites devem estar claros.
*Caso contrário, você não está escrevendo código — está adiando problemas.