Imagine um restaurante:
- Você (o cliente) faz um pedido ao garçom.
- A cozinha (o servidor) prepara e devolve o prato.
- Vocês se comunicam por um idioma combinado (o cardápio, a forma de pedir).
Na web é idêntico:
VOCÊ (cliente) O SITE (servidor)
┌───────────────┐ pedido (request) ┌──────────────────┐
│ navegador │ ────────────────────▶ │ aplicação │
│ ou curl │ │ (código + banco) │
│ │ ◀──────────────────── │ │
└───────────────┘ resposta (response) └──────────────────┘
- Cliente = quem pede. Pode ser seu navegador (Chrome), um app de celular, ou uma ferramenta de terminal como o
curl(que é um "navegador sem tela": faz o pedido e mostra a resposta crua). - Servidor = quem responde. É o computador onde o site roda o código e guarda os dados.
- O idioma combinado entre eles é o HTTP (HyperText Transfer Protocol). É só um formato de mensagem — nada mágico.
Por que isso importa para segurança: o cliente está na mão do atacante. Ele pode mandar qualquer pedido, com qualquer conteúdo — não só o que os botões do site permitem. Por isso a segurança tem que estar no servidor. Regra de ouro nº 1:
Nunca confie em nada que venha do cliente. O cliente mente.
Exemplo concreto que você vai testar: um botão "comprar" que envia preço=49,90. O atacante troca para preço=0,01. Se o servidor confiar no preço enviado pelo cliente, a loja vende de graça. O servidor tem que buscar o preço real no seu próprio banco, ignorando o que o cliente mandou.