Segurança
Métodos POST e GET
Suas credenciais estão seguras?
Você sabe onde insere suas informações?
Primeiramente vamos entender como funciona o HTTP
O HTTP é o protocolo responsável pelas requisições de páginas na WEB.
Vez por outra acessamos alguns sites que rodam o HTTP por trás de suas requisições, e esse protocolo possui alguns métodos , ou como também são chamados “Verbos” .
Os métodos (ou “Verbos”) no http definem como tal ação deve se realizada e em alguns casos dependendo do verbo o servidor poderá dar uma resposta diferente para o usuário.
Quando acessamos algum site é quase que rotineiro passarmos por uma tela com de Login, em formulários como esse inserimos nossas credenciais para termos acesso ao sistema.
Tais informações devem ser sigilosas e “invisiveis” a qualquer outra pessoa, tudo deve acontecer entre você e o servidor web.
Porém algo que pode facilmente acontecer se encontra nessa imagem abaixo , algo que aconteceu comigo mesmo:
As minhas credenciais de acesso ficaram tudo no corpo da minha URL , algo que não é nem um pouco seguro , concorda?
Essas informações na URL ficam expostas, não estou apenas me referindo se caso alguém esteja perto de você e veja as “olho” o que você digitou. Me refiro ao fato de quando essas informações trafegam na internet. O que é considerado como uma vulnerabilidade na segurança.
Quem define o local onde os parâmetros são passados são o HTTP.
Os “verbos”
Um desses verbos mais comuns são o “GET”, quando utilizamos o GET os dados (parâmetros) inseridos no formulário são passados no cabeçalho da requisição.
Por essa razão, podem ser vistos pela URL , como pode ocorrer nos formulários de login.
Esse método é padrão para enviar dados quando submetemos um formulário HTTP.
Por isso no exemplo acima, foi utilizado o GET. Contudo, conseguimos alterar esse comportamento dizendo para o formulário qual do método (method
) ele deve usar.
No caso de formulários web, é muito comum que esse método seja o POST
:
<!DOCTYPE html>
<html>
<form method="post" action="logar">
<input type="text" name="nome" placeholder="digite seu Nome aqui">
<input type="e-mail" name="email" placeholder="Digite seu e-mail">
<input type="submit" name="enviar" value="Enviar">
</html>
</form>
O parâmetro (ou “Verbo”) POST
, ao contrário do GET
, envia os parâmetros no corpo da requisição HTTP. Escondendo eles da URI:
Mas com isso , você talvez se pergunte ” Significa então que se eu utilizar o POST eu vou 100% proteger meus dados atribuídos ao formulário , já que eles não aparecem mais na URL?
Não é bem assim, na verdade eles ainda não estão seguros!
A única coisa que o POST
faz é enviar os parâmetros no corpo da requisição. Se inspecionarmos a requisição, ou usarmos algum tipo de sniffer de rede como o Wireshark , conseguiremos facilmente vêr os dados inseridos nos campos do formulário que utiliza esse método.
Então caso não queira que seus dados sejam vistos , procure utilizar a versão segura do HTTP o “HTTPS” .
Com essa versão conseguimos criptografar os dados que serão enviados.
Ambos os verbos são muito utilizado em formulários de sites na internet e possuem algumas outras diferenças entre si.
Como o GET
envia os dados no cabeçalho da requisição, ele tende a ser, não é uma regra,um pouco mais performático que o POST
.
Porém, por enviar os dados no cabeçalho da requisição, o GET
tem um tamanho máximo de dados que podem ser enviados, que no geral é de 255
caracteres.
Com POST
, podemos enviar informações um pouco maiores, como imagens. Ou seja, se tentarmos passar uma grande quantidade de informações via GET
, algumas partes podem ser perdidas no caminho.
Mas não conclua que utilizar o POST
é o melhor caminho já que ele encapsula os dados no corpo da requisição e consegue transportar mais dados que o GET
, portanto, utilizaríamos o POST
em todo lugar.
Porém, se existem dois verbos diferentes, não concorda que é porque eles foram feitos para serem utilizados em locais diferentes?
As requisições do tipo GET
são recomendadas para obter dados de um determinado recurso. Como em um formulário de busca ou em uma listagem de todos os produtos cadastrados.
Já as requisições POST
são mais utilizadas para para enviar informações para serem processadas, como por exemplo, criar algum recurso, como um produto, ou um cliente.