Fundamentos do PHP

0/25 aulas0%
pratica

Métodos GET e POST: diferenças e uso seguro

Aprenda sobre métodos get e post: diferenças e uso seguro

40 min
Aula 2 de 5

🚀 Módulo 4: Interagindo com a Web e Superglobais

Aula: Métodos GET e POST: Diferenças e Uso Seguro

Olá, futuro desenvolvedor PHP! 👋 Nesta aula prática, vamos mergulhar nos dois métodos HTTP mais fundamentais para a interação entre o navegador e o servidor: GET e POST. Entender suas diferenças, quando usá-los e como manipulá-los de forma segura é crucial para construir aplicações web robustas e eficazes.

Ao final desta aula, você será capaz de:

  • Compreender as características e propósitos dos métodos GET e POST.
  • Acessar dados enviados via GET e POST usando as superglobais $_GET e $_POST.
  • Identificar cenários apropriados para cada método.
  • Aplicar técnicas básicas de segurança, como validação e filtragem de entrada, para proteger sua aplicação.

Vamos começar! 💻


1. Introdução: A Comunicação Cliente-Servidor 🌐

Quando você digita um endereço em seu navegador ou clica em um link, está iniciando uma requisição HTTP. Essa requisição é o meio pelo qual o navegador (cliente) solicita algo de um servidor. Os métodos GET e POST são duas das formas mais comuns de "empacotar" e enviar dados nessa requisição.

Imagine que você está pedindo uma pizza 🍕.

  • Se você apenas pergunta "Qual o sabor do dia?", você está fazendo uma requisição GET – apenas querendo informação.
  • Se você diz "Quero uma pizza de calabresa e paguei por pix", você está fazendo uma requisição POST – enviando informações para que algo seja criado ou modificado (seu pedido).

Entender essas diferenças é a chave para uma comunicação web eficiente e segura.


2. O Método GET: Buscando Informações 🔍

O método GET é projetado para solicitar dados de um recurso especificado. Ele é o método padrão quando você digita uma URL no navegador ou clica em um link.

Características Principais:

  • Dados na URL: Os dados são anexados à URL como pares chave=valor após um ?, separados por &. Ex: minhaapp.com/pesquisa?q=php&categoria=web.
  • Visível: Os dados são visíveis na barra de endereços do navegador e no histórico.
  • Bookmarkable: URLs com parâmetros GET podem ser salvas como favoritos e compartilhadas.
  • Idempotente: Fazer a mesma requisição GET várias vezes não deve ter efeitos colaterais no servidor. (Ex: buscar a mesma página 10 vezes não a modifica).
  • Limite de Tamanho: Há um limite prático para a quantidade de dados que pode ser enviada via GET (geralmente em torno de 2048 caracteres, dependendo do navegador e servidor).
  • Não Seguro para Dados Sensíveis: Devido à visibilidade, NUNCA use GET para enviar senhas, dados de cartão de crédito ou outras informações confidenciais.

Acessando Dados GET no PHP: $_GET 🔑

No PHP, os dados enviados via GET são automaticamente populados na superglobal $_GET. Esta é uma array associativa onde as chaves são os nomes dos parâmetros da URL e os valores são os dados correspondentes.

Exemplo de Formulário GET:

index.html (ou index.php com HTML):

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Formulário GET</title>
    <style>
        body { font-family: sans-serif; margin: 20px; }
        form { margin-bottom: 20px; padding: 15px; border: 1px solid #ccc; border-radius: 5px; }
        label { display: block; margin-bottom: 5px; font-weight: bold; }
        input[type="text"] { width: 100%; padding: 8px; margin-bottom: 10px; border: 1px solid #ddd; border-radius: 4px; }
        input[type="submit"] { background-color: #007bff; color: white; padding: 10px 15px; border: none; border-radius: 4px; cursor: pointer; }
        input[type="submit"]:hover { background-color: #0056b3; }
        .resultado { background-color: #e9ecef; padding: 15px; border-radius: 5px; }
    </style>
</head>
<body>
    <h1>Pesquisa de Produtos (GET)</h1>
    <form action="processa_get.php" method="GET">
        <label for="termo_pesquisa">Termo de Pesquisa:</label>
        <input type="text" id="termo_pesquisa" name="q" placeholder="Ex: smartphone, notebook">
        <br>
        <label for="categoria">Categoria:</label>
        <input type="text" id="categoria" name="cat" placeholder="Ex: eletrônicos, informática">
        <br>
        <input type="submit" value="Pesquisar">
    </form>
 
    <div class="resultado">
        <h2>Resultado da Pesquisa:</h2>
        <?php
            // Este bloco PHP só será executado se o arquivo for processa_get.php
            // ou se o formulário for submetido para a própria página (action="").
            // Para este exemplo, usaremos um arquivo separado.
            if (isset($_GET['q'])) {
                echo "<p>Você pesquisou por: <strong>" . htmlspecialchars($_GET['q']) . "</strong></p>";
            }
            if (isset($_GET['cat'])) {
                echo "<p>Na categoria: <strong>" . htmlspecialchars($_GET['cat']) . "</strong></p>";
            }
            if (empty($_GET)) {
                echo "<p>Nenhuma pesquisa realizada ainda.</p>";
            }
        ?>
    </div>
</body>
</html>

processa_get.php:

<?php
// Documentação oficial $_GET: https://www.php.net/manual/pt_BR/reserved.variables.get.php
 
echo "<!DOCTYPE html>";
echo "<html lang='pt-BR'>";
echo "<head><meta charset='UTF-8'><title>Resultado GET</title>";
echo "<style>body { font-family: sans-serif; margin: 20px; background-color: #f8f9fa; }</style>";
echo "</head><body>";
echo "<h1>Resultado da Pesquisa (GET)</h1>";
 
if (isset($_GET['q']) && !empty($_GET['q'])) {
    // Sempre use htmlspecialchars() ao exibir dados do usuário para prevenir XSS
    $termo = htmlspecialchars($_GET['q']);
    echo "<p>Você pesquisou por: <strong>" . $termo . "</strong></p>";
} else {
    echo "<p>Nenhum termo de pesquisa foi fornecido.</p>";
}
 
if (isset($_GET['cat']) && !empty($_GET['cat'])) {
    $categoria = htmlspecialchars($_GET['cat']);
    echo "<p>Na categoria: <strong>" . $categoria . "</strong></p>";
} else {
    echo "<p>Nenhuma categoria foi especificada.</p>";
}
 
echo "<p><a href='index.html'>Voltar</a></p>"; // Link para voltar ao formulário
echo "</body></html>";
?>

Ao preencher o formulário e clicar em "Pesquisar", você verá a URL mudar para algo como processa_get.php?q=smartphone&cat=eletronicos e os dados serão exibidos.


3. O Método POST: Enviando Dados para o Servidor 📦

O método POST é usado para enviar dados para o servidor, geralmente para criar ou atualizar um recurso. É o método preferido para formulários que envolvem a submissão de dados que podem alterar o estado do servidor.

Características Principais:

  • Dados no Corpo da Requisição: Os dados são enviados no corpo da requisição HTTP, não na URL.
  • Não Visível: Os dados não são visíveis na barra de endereços do navegador.
  • Não Bookmarkable: Requisições POST não podem ser salvas como favoritos ou compartilhadas diretamente.
  • Não Idempotente: Fazer a mesma requisição POST várias vezes pode ter efeitos colaterais (Ex: enviar o mesmo formulário duas vezes pode criar dois registros no banco de dados).
  • Sem Limite de Tamanho Prático: Não há um limite de tamanho estrito como no GET, tornando-o adequado para enviar grandes volumes de dados (como uploads de arquivos).
  • Mais Seguro para Dados Sensíveis: Embora os dados não sejam visíveis na URL, eles NÃO SÃO CRIPTOGRAFADOS POR PADRÃO. Para garantir a segurança de dados sensíveis, SEMPRE use HTTPS.

Acessando Dados POST no PHP: $_POST 🔐

Similar ao GET, os dados enviados via POST são acessíveis através da superglobal $_POST, que também é uma array associativa.

Exemplo de Formulário POST:

index.html (ou index.php com HTML):

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Formulário POST</title>
    <style>
        body { font-family: sans-serif; margin: 20px; }
        form { margin-bottom: 20px; padding: 15px; border: 1px solid #ccc; border-radius: 5px; }
        label { display: block; margin-bottom: 5px; font-weight: bold; }
        input[type="text"], input[type="password"], textarea { width: 100%; padding: 8px; margin-bottom: 10px; border: 1px solid #ddd; border-radius: 4px; }
        input[type="submit"] { background-color: #28a745; color: white; padding: 10px 15px; border: none; border-radius: 4px; cursor: pointer; }
        input[type="submit"]:hover { background-color: #218838; }
        .resultado { background-color: #e9ecef; padding: 15px; border-radius: 5px; }
    </style>
</head>
<body>
    <h1>Cadastro de Usuário (POST)</h1>
    <form action="processa_post.php" method="POST">
        <label for="nome_usuario">Nome de Usuário:</label>
        <input type="text" id="nome_usuario" name="username" required>
        <br>
        <label for="email_usuario">E-mail:</label>
        <input type="text" id="email_usuario" name="email" required>
        <br>
        <label for="senha_usuario">Senha:</label>
        <input type="password" id="senha_usuario" name="password" required>
        <br>
        <input type="submit" value="Cadastrar">
    </form>
 
    <div class="resultado">
        <h2>Dados Recebidos (POST):</h2>
        <?php
            // Este bloco PHP só será executado se o arquivo for processa_post.php
            // ou se o formulário for submetido para a própria página (action="").
            // Para este exemplo, usaremos um arquivo separado.
            if (isset($_POST['username'])) {
                echo "<p>Nome de Usuário: <strong>" . htmlspecialchars($_POST['username']) . "</strong></p>";
            }
            if (isset($_POST['email'])) {
                echo "<p>E-mail: <strong>" . htmlspecialchars($_POST['email']) . "</strong></p>";
            }
            // NUNCA exiba senhas em páginas de resultado!
            // if (isset($_POST['password'])) {
            //     echo "<p>Senha: <strong>" . htmlspecialchars($_POST['password']) . "</strong></p>";
            // }
            if (empty($_POST)) {
                echo "<p>Nenhum dado de cadastro enviado ainda.</p>";
            }
        ?>
    </div>
</body>
</html>

processa_post.php:

<?php
// Documentação oficial $_POST: https://www.php.net/manual/pt_BR/reserved.variables.post.php
 
echo "<!DOCTYPE html>";
echo "<html lang='pt-BR'>";
echo "<head><meta charset='UTF-8'><title>Resultado POST</title>";
echo "<style>body { font-family: sans-serif; margin: 20px; background-color: #f8f9fa; }</style>";
echo "</head><body>";
echo "<h1>Resultado do Cadastro (POST)</h1>";
 
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_POST['username']) && !empty($_POST['username'])) {
        $username = htmlspecialchars($_POST['username']);
        echo "<p>Nome de Usuário: <strong>" . $username . "</strong></p>";
    } else {
        echo "<p style='color: red;'>Nome de usuário não fornecido.</p>";
    }
 
    if (isset($_POST['email']) && !empty($_POST['email'])) {
        $email = htmlspecialchars($_POST['email']);
        echo "<p>E-mail: <strong>" . $email . "</strong></p>";
    } else {
        echo "<p style='color: red;'>E-mail não fornecido.</p>";
    }
 
    // Para senhas, você NUNCA deve exibi-las e deve sempre hashá-las antes de armazenar.
    // Apenas para fins de demonstração que o dado chegou:
    if (isset($_POST['password']) && !empty($_POST['password'])) {
        // echo "<p>Senha (NÃO FAÇA ISSO EM PRODUÇÃO!): <strong>" . htmlspecialchars($_POST['password']) . "</strong></p>";
        echo "<p>Senha recebida com sucesso (não exibida por segurança).</p>";
        // Em um cenário real, você faria:
        // $hashed_password = password_hash($_POST['password'], PASSWORD_DEFAULT);
        // Salvaria $username, $email e $hashed_password no banco de dados.
    } else {
        echo "<p style='color: red;'>Senha não fornecida.</p>";
    }
 
    echo "<p style='color: green;'>Dados de cadastro processados (em um cenário real, seriam salvos no banco de dados).</p>";
 
} else {
    echo "<p>Este arquivo deve ser acessado via método POST.</p>";
}
 
echo "<p><a href='index.html'>Voltar</a></p>"; // Link para voltar ao formulário
echo "</body></html>";
?>

Ao preencher o formulário POST, você notará que a URL não muda e os dados não são visíveis.


4. Diferenças Chave: GET vs. POST 🆚

CaracterísticaGETPOST
PropósitoObter/recuperar dadosEnviar/submeter dados (criar/atualizar)
VisibilidadeDados visíveis na URLDados enviados no corpo da requisição, não visíveis na URL
BookmarkableSimNão
HistóricoSim, fica no histórico do navegadorNão fica no histórico (dados do formulário)
IdempotênciaSim (múltiplas requisições não alteram o estado do servidor)Não (múltiplas requisições podem ter efeitos colaterais)
Tamanho dos DadosLimitado (aprox. 2KB-8KB dependendo do navegador/servidor)Praticamente ilimitado (definido pelas configurações do servidor)
SegurançaNÃO SEGURO para dados sensíveisMAIS SEGURO para dados sensíveis (mas requer HTTPS para criptografia)
Uso ComumPesquisas, filtros, paginação, exibição de detalhes de um itemFormulários de login, cadastro, envio de comentários, uploads de arquivos

5. Uso Seguro: Validação e Filtragem de Entrada 🛡️

Independente de usar GET ou POST, TODO DADO RECEBIDO DO USUÁRIO É POTENCIALMENTE MALICIOSO. Nunca confie nos dados de entrada. É sua responsabilidade como desenvolvedor validar e filtrar esses dados.

Por que é importante?

  • SQL Injection: Atacantes podem inserir código SQL malicioso para manipular ou roubar dados do seu banco.
  • Cross-Site Scripting (XSS): Atacantes podem injetar scripts maliciosos (geralmente JavaScript) que são executados no navegador de outros usuários.
  • Quebra de Lógica: Dados inválidos podem causar erros na sua aplicação ou comportamentos inesperados.

Ferramentas PHP para Segurança: filter_input() 🔒

A função filter_input() é a forma recomendada e mais segura de acessar variáveis externas (como $_GET, $_POST, $_COOKIE, $_SERVER). Ela permite filtrar e validar os dados de entrada de forma robusta.

Sintaxe básica:

filter_input(int $type, string $variable_name, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed
  • $type: A constante INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, ou INPUT_ENV.
  • $variable_name: O nome da variável a ser recuperada (a chave na array superglobal).
  • $filter: Uma constante de filtro (ex: FILTER_SANITIZE_STRING, FILTER_VALIDATE_EMAIL, FILTER_SANITIZE_NUMBER_INT).
  • $options: Opções adicionais para o filtro.

Exemplo com filter_input():

Vamos refatorar nossos exemplos anteriores para usar filter_input().

processa_get_seguro.php:

<?php
// Documentação oficial filter_input: https://www.php.net/manual/pt_BR/function.filter-input.php
// Tipos de filtros: https://www.php.net/manual/pt_BR/filter.filters.php
 
echo "<!DOCTYPE html>";
echo "<html lang='pt-BR'>";
echo "<head><meta charset='UTF-8'><title>Resultado GET Seguro</title>";
echo "<style>body { font-family: sans-serif; margin: 20px; background-color: #f8f9fa; }</style>";
echo "</head><body>";
echo "<h1>Resultado da Pesquisa (GET) - Seguro</h1>";
 
// Filtrando o termo de pesquisa:
// FILTER_SANITIZE_STRING (obsoleto no PHP 8.1, use htmlspecialchars() ou FILTER_UNSAFE_RAW com flags)
// Para o PHP moderno, é melhor usar FILTER_UNSAFE_RAW e depois htmlspecialchars() na exibição.
// Ou, para remover tags HTML, strip_tags().
$termo = filter_input(INPUT_GET, 'q', FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);
// Importante: htmlspecialchars() ainda é necessário ao *exibir* o dado HTML.
if ($termo !== null && $termo !== false && !empty($termo)) {
    echo "<p>Você pesquisou por: <strong>" . htmlspecialchars($termo) . "</strong></p>";
} else {
    echo "<p>Nenhum termo de pesquisa válido foi fornecido.</p>";
}
 
// Filtrando a categoria (removendo tags HTML e caracteres especiais indesejados)
$categoria = filter_input(INPUT_GET, 'cat', FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);
if ($categoria !== null && $categoria !== false && !empty($categoria)) {
    echo "<p>Na categoria: <strong>" . htmlspecialchars($categoria) . "</strong></p>";
} else {
    echo "<p>Nenhuma categoria válida foi especificada.</p>";
}
 
echo "<p><a href='index.html'>Voltar</a></p>";
echo "</body></html>";
?>

processa_post_seguro.php:

<?php
echo "<!DOCTYPE html>";
echo "<html lang='pt-BR'>";
echo "<head><meta charset='UTF-8'><title>Resultado POST Seguro</title>";
echo "<style>body { font-family: sans-serif; margin: 20px; background-color: #f8f9fa; }</style>";
echo "</head><body>";
echo "<h1>Resultado do Cadastro (POST) - Seguro</h1>";
 
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Filtrando o nome de usuário (removendo tags HTML e caracteres que não são letras/números/espaços)
    $username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING); // FILTER_SANITIZE_STRING remove tags HTML
    // Alternativa mais robusta para PHP 8.1+:
    // $username = filter_input(INPUT_POST, 'username', FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);
    // $username = strip_tags($username); // Remove tags HTML
 
    if ($username !== null && $username !== false && !empty($username)) {
        echo "<p>Nome de Usuário: <strong>" . htmlspecialchars($username) . "</strong></p>";
    } else {
        echo "<p style='color: red;'>Nome de usuário inválido ou não fornecido.</p>";
    }
 
    // Validando e filtrando o e-mail
    $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL); // Valida o formato do e-mail
    if ($email !== null && $email !== false) { // filter_input retorna false se a validação falhar
        echo "<p>E-mail: <strong>" . htmlspecialchars($email) . "</strong></p>";
    } else {
        echo "<p style='color: red;'>E-mail inválido ou não fornecido.</p>";
    }
 
    // Senhas não devem ser filtradas ou exibidas diretamente.
    // Apenas verificamos se ela foi enviada e a processamos (hasheamos)
    $password = filter_input(INPUT_POST, 'password'); // Apenas obtemos o valor bruto
    if ($password !== null && $password !== false && !empty($password)) {
        echo "<p>Senha recebida com sucesso (não exibida por segurança).</p>";
        // Em um cenário real, você faria:
        // $hashed_password = password_hash($password, PASSWORD_DEFAULT);
        // Salvaria $username, $email e $hashed_password no banco de dados.
    } else {
        echo "<p style='color: red;'>Senha não fornecida.</p>";
    }
 
    echo "<p style='color: green;'>Dados de cadastro processados de forma segura.</p>";
 
} else {
    echo "<p>Este arquivo deve ser acessado via método POST.</p>";
}
 
echo "<p><a href='index.html'>Voltar</a></p>";
echo "</body></html>";
?>

Observação sobre FILTER_SANITIZE_STRING: No PHP 8.1, FILTER_SANITIZE_STRING foi marcado como obsoleto e removido no PHP 9.0. Para remover tags HTML, você deve usar strip_tags() ou htmlspecialchars() ao exibir. Para sanitizar de forma mais genérica, FILTER_UNSAFE_RAW com flags como FILTER_FLAG_STRIP_LOW e FILTER_FLAG_STRIP_HIGH pode ser útil, seguido de sanitização específica para o contexto (ex: SQL, HTML).


6. Exercícios/Desafios Práticos 💡

Agora é sua vez de colocar a mão na massa! Crie os seguintes arquivos e teste-os em seu servidor PHP (Apache com PHP, Nginx com PHP-FPM, ou o servidor embutido do PHP php -S localhost:8000).

Desafio 1: Formulário de Login (POST)

Crie um formulário de login que envie dados via POST.

  • Crie um arquivo login.html com um formulário que tenha campos para username e password.
  • O action do formulário deve apontar para autenticar.php.
  • Crie o arquivo autenticar.php.
  • Em autenticar.php, verifique se o método da requisição é POST.
  • Use filter_input() para obter e sanitizar o username e a password.
  • Validação Simples: Se username for "admin" e password for "12345", exiba uma mensagem de "Login bem-sucedido!".
  • Caso contrário, exiba "Usuário ou senha inválidos.".
  • Lembre-se de NÃO exibir a senha recebida.

Desafio 2: Galeria de Imagens com Filtro (GET)

Crie uma página que simule uma galeria de imagens e permita filtrar por categoria usando GET.

  • Crie um arquivo galeria.php.
  • No galeria.php, crie um formulário com um campo de texto (name="categoria") e um botão de submit. O method deve ser GET e o action deve apontar para a própria galeria.php.
  • Abaixo do formulário, crie um array PHP de exemplo com algumas imagens (apenas nomes ou URLs fictícias) e suas categorias:
    $imagens = [
        ['nome' => 'Paisagem 1', 'categoria' => 'natureza', 'url' => 'https://via.placeholder.com/150/0000FF/FFFFFF?text=Paisagem1'],
        ['nome' => 'Cidade Noturna', 'categoria' => 'urbano', 'url' => 'https://via.placeholder.com/150/FF0000/FFFFFF?text=Cidade'],
        ['nome' => 'Animal Fofo', 'categoria' => 'natureza', 'url' => 'https://via.placeholder.com/150/00FF00/FFFFFF?text=Animal'],
        ['nome' => 'Arquitetura Moderna', 'categoria' => 'urbano', 'url' => 'https://via.placeholder.com/150/FFFF00/000000?text=Arqui']
    ];
  • Se um termo de categoria for enviado via GET:
    • Use filter_input() para obter e sanitizar o termo da categoria.
    • Filtre o array $imagens para exibir apenas as imagens que pertencem à categoria pesquisada.
    • Exiba as imagens filtradas (pode ser apenas o nome e URL como texto, ou tags <img> se quiser).
  • Se nenhum termo de categoria for enviado, exiba todas as imagens.
  • Adicione um link "Ver todas as imagens" que limpe o filtro (apontando para galeria.php sem parâmetros GET).

Desafio 3: Formulário de Contato com Validação (POST)

Crie um formulário de contato com validação básica para email e mensagem.

  • Crie um arquivo contato.html com um formulário que tenha campos para nome, email e mensagem (textarea). O método deve ser POST e o action para enviar_contato.php.
  • Crie o arquivo enviar_contato.php.
  • Em enviar_contato.php:
    • Verifique se o método é POST.
    • Use filter_input() para obter e sanitizar nome e mensagem.
    • Use filter_input() com FILTER_VALIDATE_EMAIL para validar o email.
    • Se o email for inválido, exiba uma mensagem de erro.
    • Se nome ou mensagem estiverem vazios após a sanitização, exiba uma mensagem de erro.
    • Se todos os dados forem válidos, exiba uma mensagem de sucesso, mostrando o nome e o email (sanitizados) do remetente e a mensagem (sanitizada).
    • Adicione um link para voltar ao formulário de contato.

7. Resumo e Próximos Passos 🚀

Nesta aula, você aprendeu sobre os métodos HTTP GET e POST, suas diferenças cruciais e como acessá-los no PHP usando as superglobais $_GET e $_POST. Mais importante, você viu a necessidade de sempre validar e filtrar os dados de entrada usando funções como filter_input() e htmlspecialchars() para proteger sua aplicação contra vulnerabilidades comuns como XSS e SQL Injection.

Pontos Chave:

  • GET é para buscar dados, visível na URL, bookmarkable, idempotente.
  • POST é para enviar dados, não visível na URL, não bookmarkable, não idempotente.
  • $_GET e $_POST são arrays associativas no PHP para acessar os dados.
  • filter_input() é a forma segura de acessar e sanitizar/validar dados de entrada.
  • htmlspecialchars() é essencial para exibir dados do usuário no HTML com segurança.
  • HTTPS é fundamental para criptografar dados em trânsito, especialmente com POST.

Nos próximos módulos, exploraremos outras superglobais, como $_SESSION e $_COOKIE, e como elas são usadas para manter o estado da aplicação e gerenciar a experiência do usuário. Continue praticando e construindo! A segurança é um processo contínuo, e as bases que você aprendeu hoje são essenciais para qualquer aplicação web.

© 2025 Escola All Dev. Todos os direitos reservados.

Métodos GET e POST: diferenças e uso seguro - Fundamentos do PHP | escola.all.dev.br