<< Aula anterior | Sumário do Curso | Próxima aula >>
Fala, dev! Tudo sob controle no backend?
Se você já navegou pela internet nos últimos anos, com certeza já se deparou com o navegador gritando: "Este site não é seguro!" ao tentar acessar uma página HTTP comum. No mundo atual, não ter um cadeado verde (ou ícone de segurança) no seu site é praticamente assinar a sentença de morte para o seu tráfego e credibilidade.
Hoje vamos entender como o PHP lida com esse protocolo e como você pode escrever códigos para identificar e proteger o acesso dos seus usuários.
O que é HTTP vs HTTPS e por que o PHP precisa saber disso?
Resposta Direta: Para checar se o usuário está em uma conexão segura via PHP, verificamos se a chave HTTPS existe e não está vazia na variável superglobal $_SERVER. O HTTPS (Hypertext Transfer Protocol Secure) adiciona uma camada de criptografia (SSL/TLS) ao HTTP comum, protegendo os dados trafegados entre o cliente e o servidor contra interceptações.
Para deixar claro a diferença estrutural:
- HTTP: A comunicação é feita em "texto plano". Se alguém interceptar a rede (um ataque Man-in-the-Middle), consegue ler senhas, e-mails e dados de cartão de crédito.
- HTTPS: A comunicação é criptografada. Mesmo que o pacote de dados seja interceptado no meio do caminho, o atacante só verá um monte de caracteres ilegíveis e embaralhados.
Além da segurança vital, os motores de busca (como o Google) priorizam sites em HTTPS. Ou seja: ter um site HTTPS é fundamental para o seu SEO.
Script PHP: Verificando se a página é HTTPS
A estrutura nativa para descobrir o protocolo que está sendo utilizado naquele exato momento de acesso é bem simples e elegante. Basta perguntar ao servidor web se a flag HTTPS foi ativada na requisição.
<?php
/**
* Script Progressivo: Verificador de Protocolo
*/
// Verifica se a chave 'HTTPS' existe, não está vazia e tem o valor 'on'
if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') {
echo "<h3 style='color: green;'>🔒 Segurança garantida: O HTTPS está ativo!</h3>";
} else {
echo "<h3 style='color: red;'>⚠️ Cuidado: O HTTP padrão está ativo (Conexão não segura).</h3>";
}
?>
'off' porque alguns servidores IIS (da Microsoft) costumam setar a variável $_SERVER['HTTPS'] com a string 'off' em conexões não seguras, em vez de simplesmente deixá-la vazia como o Apache faz. Prever esses cenários é o que te faz um programador à prova de falhas!
Quer ir além dos scripts básicos de internet?
Profissionais que escrevem códigos seguros e eficientes ganham as melhores vagas e fecham os contratos mais caros. Se você está cansado de ficar pescando dicas soltas e quer um material linear, didático e focado no seu crescimento profissional, a nossa Apostila Completa é o atalho perfeito. Estude offline, pratique com exercícios focados e acesse o gabarito.
Baixar Apostila PHP Progressivo Agora 🚀
O Cenário Moderno: Proxies, Cloudflare e Load Balancers
Se você colocar o seu site atrás de uma CDN de performance como a Cloudflare ou em um balanceador de carga da AWS, o script acima pode falhar. Por quê?
Porque o usuário conecta via HTTPS na Cloudflare, mas a Cloudflare pode se conectar via HTTP com o seu servidor. Para o seu PHP, a conexão parecerá insegura, gerando loops de redirecionamento ou falsos positivos.
Para contornar isso em servidores corporativos, o padrão de mercado é checar um cabeçalho extra:
<?php
// Verificação Sênior: Lida com conexões diretas e proxies/Cloudflare
$isSecure = false;
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') {
$isSecure = true;
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' || !empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] === 'on') {
$isSecure = true;
}
echo $isSecure ? "Conexão Segura Ativa!" : "Atenção: Tráfego Inseguro.";
?>
Bônus: Como forçar o HTTPS no PHP (Redirecionamento 301)
Agora que você sabe detectar a conexão, de nada adianta apenas mostrar um aviso. O correto é proteger o usuário! Se ele acessar via HTTP, nós devemos pegá-lo pela mão e redirecioná-lo obrigatoriamente para a versão segura do site.
Coloque este trecho de código no topo do seu arquivo principal (antes de qualquer saída HTML):
<?php
// Se não for seguro...
if (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] === "off") {
// Monta a nova URL forçando o "https://"
$redirectURL = "https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
// Envia o cabeçalho de redirecionamento permanente (Bom para SEO)
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $redirectURL);
exit(); // Encerra o script para garantir o salto
}
?>
Torne-se um Mestre da Programação
Segurança de redes, manipulação de servidores, linguagens de baixo nível e arquitetura web. Se você quer ter o arsenal completo de um Engenheiro de Software sempre à disposição no seu celular, tablet ou PC, nosso Mega Pack é o seu próximo passo.
Consolide seu Conhecimento
Proteger aplicações web é um ciclo contínuo de estudos. Agora que você dominou a verificação de protocolo, que tal aprofundar suas habilidades em outras métricas de servidores e segurança?
- Estatísticas de Acesso: Capturando o Navegador e SO com HTTP_USER_AGENT
- Identidade Real: Como rastrear o IP do usuário passando por Proxies
- Redirecionamentos e HTTP: Entendendo a fundo a função header() do PHP