Quando vamos acessar um sistema web, é bem comum passar por uma tela de login, na qual colocamos nossas credenciais para ter acesso ao sistema.
Essas informações devem ser sigilosas, porém, quando fui tentar logar em uma aplicação web que estou desenvolvendo, tive o seguinte resultado:
Veja que nossos parâmetros (e-mail e senha) foram passados pela URI, o que não é muito seguro não é? Geralmente quando fazemos login em alguns sites isso não acontece, pelo menos na maioria deles.
Essas informações na URL ficam expostas, não apenas caso alguém esteja perto e veja o que você digitou. Mas também quando essas informações trafegam na internet. O que é uma vulnerabilidade na segurança.
O que define o local onde os parâmetros são passados é o protocolo de comunicação da web, o HTTP.
Outro exemplo:
sujeitoprogramador.com/index.php?categoria=3&pag=2&tipo=5
Para entender melhor este exemplo, é preciso olhar para as informações que vem logo após o sinal de interrogação “?”, pois é o símbolo que indica o início dos dados passados através da URL, ou seja, pelo método GET.
É importante observar que sempre vem um índice e um valor logo após o sinal de interrogação (Ex.: categoria=3) e quando se quer incluir mais de uma informação, acrescenta-se o símbolo “&” para concatenar o restante (Ex.: categoria=3&pag=2&tipo=5).
Ao clicar em um link (tag <a>), os dados ali contidos são enviados utilizando o método GET. Como os valores são passados pela URL e retornados ao cliente, as informações enviadas ficam visíveis, o que pode se tornar uma brecha na segurança, pois um visitante malicioso pode colocar algum código malicioso (SQL Injection, por exemplo) e fazer um belo estrago com o site, ou até mesmo o servidor.
Quando o objetivo é passar parâmetros confidenciais, como exemplo as senhas, não deve ser usado o método GET.
Conhecendo o HTTP O HTTP
é o protocolo responsável pela comunicação de sites na web. Quando acessamos um site, é esse protocolo que utilizamos. Esse protocolo possui alguns métodos, ou, como também são chamados, verbos.
Os verbos HTTP definem qual ação deve ser realizada e, dependendo do verbo, o servidor pode dar uma resposta diferente.
Conhecendo os verbos
Um dos verbos mais comuns do HTTP é o GET. Quando utilizamos o GET, os parâmetros são passados no cabeçalho da requisição. Por isso, podem ser vistos pela URI, como no caso do nosso formulário de login.
Esse verbo é o 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:
<form action=“/logar“ method=“post“>
O POST
, ao contrário do GET
, envia os parâmetros no corpo da requisição HTTP. Escondendo eles da URI:
Então isso significa que se utilizarmos o POST protegemos os dados submetidos pelo formulário, já que eles não aparecem na URI?
Não exatamente. A única coisa que o POST faz é enviar os parâmetros no corpo da requisição. Se inspecionarmos a requisição, conseguimos acesso a eles:
Se quisermos proteger, de fato, nossa aplicação, precisamos utilizar a “versão segura” do HTTP, o HTTPS. Com ela, conseguimos criptografar os dados enviados.
Ambos os verbos são muito utilizado em formulários na web 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.
Com isso você pode estar pensando 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, vamos utilizar o POST em todo lugar.
Porém, se existem dois verbos diferentes, é 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.
Conhecendo outros verbos
Além do GET e do POST, existem outros verbos HTTP que podem ser utilizados. Por exemplo, se quisermos deletar algum recurso, podemos utilizar o verbo DELETE.
Já se quisermos atualizar os dados, podemos utilizar o PUT, que substitui todas as informações de um determinado recurso, por exemplo um produto. Ou então utilizar o verbo PATCH que atualiza parcialmente os dados de um produto.
Todos esses verbos são muito utilizados no mundo web. Principalmente quando estamos utilizando o modelo REST. Conhecer o protocolo HTTP e seus verbos é muito valioso para um desenvolvedor web. Já que podemos construir aplicações melhores.