Qual é a diferença ao usar GET
ou POST
método? Qual é o mais seguro? Quais são (des) vantagens de cada um deles?
Qual é a diferença ao usar GET
ou POST
método? Qual é o mais seguro? Quais são (des) vantagens de cada um deles?
Respostas:
Não é uma questão de segurança. O protocolo HTTP define solicitações do tipo GET como idempotentes , enquanto os POSTs podem ter efeitos colaterais. Em inglês simples, isso significa que o GET é usado para visualizar algo, sem alterá-lo, enquanto o POST é usado para alterar algo. Por exemplo, uma página de pesquisa deve usar GET, enquanto um formulário que altera sua senha deve usar POST.
Além disso, observe que o PHP confunde um pouco os conceitos. Uma solicitação POST obtém entrada da cadeia de consulta e através do corpo da solicitação. Uma solicitação GET apenas obtém entrada da string de consulta. Portanto, uma solicitação POST é um superconjunto de uma solicitação GET; você pode usar $_GET
em uma solicitação POST e pode até fazer sentido ter parâmetros com o mesmo nome $_POST
e $_GET
isso significa coisas diferentes.
Por exemplo, digamos que você tenha um formulário para editar um artigo. O ID do artigo pode estar na string de consulta (e, portanto, disponível até $_GET['id']
), mas digamos que você queira alterar o ID do artigo. O novo ID pode estar presente no corpo da solicitação ( $_POST['id']
). OK, talvez esse não seja o melhor exemplo, mas espero que ilustre a diferença entre os dois.
Quando o usuário digita as informações em um formulário e clica em Enviar, há duas maneiras pelas quais as informações podem ser enviadas do navegador para o servidor: na URL ou no corpo da solicitação HTTP.
O método GET, que foi usado no exemplo anterior, anexa pares de nome / valor ao URL. Infelizmente, o tamanho de uma URL é limitado, portanto esse método funciona apenas se houver apenas alguns parâmetros. O URL pode ser truncado se o formulário usar um grande número de parâmetros ou se os parâmetros contiverem grandes quantidades de dados. Além disso, os parâmetros transmitidos na URL são visíveis no campo de endereço do navegador, não sendo o melhor local para a exibição de uma senha.
A alternativa ao método GET é o método POST. Esse método empacota os pares nome / valor dentro do corpo da solicitação HTTP, o que cria uma URL mais limpa e não impõe limitações de tamanho na saída dos formulários. Também é mais seguro.
A melhor resposta foi a primeira.
Você está usando:
GET
também é perfeitamente capaz de 'enviar' dados, portanto, não é uma resposta muito precisa.
Existem duas implicações comuns de "segurança" no uso GET
. Como os dados aparecem na string da URL, é possível que alguém que esteja olhando por cima do seu ombro na barra de endereços / URL possa visualizar algo que não deve ter acesso, como um cookie de sessão que poderia ser usado para seqüestrar sua sessão. Lembre-se de que todos têm telefones com câmera.
A outra implicação de segurança GET
tem a ver com as GET
variáveis registradas na maioria dos servidores da Web, como parte da URL solicitante. Dependendo da situação, do clima regulatório e da sensibilidade geral dos dados, isso pode gerar preocupações.
Alguns clientes / firewalls / sistemas IDS podem desaprovar GET
solicitações que contêm uma quantidade excessiva de dados e, portanto, fornecer resultados não confiáveis.
POST
suporta funcionalidade avançada, como suporte para entrada binária de várias partes usada para upload de arquivos para servidores da Web.
POST
requer um cabeçalho de tamanho de conteúdo que possa aumentar a complexidade de uma implementação de cliente específica do aplicativo, pois o tamanho dos dados enviados deve ser conhecido antecipadamente, impedindo que uma solicitação do cliente seja formada em um modo incremental de passagem única. Talvez seja um problema menor para quem optar por abusar HTTP
usando-o como um transporte RPC (Remote Procedure Call).
Outros já fizeram um bom trabalho ao cobrir as diferenças semânticas e a parte "quando" desta questão.
Uso GET quando estou recuperando informações de um URL e POST quando estou enviando informações para um URL.
Você deve usar o POST se houver muitos dados ou informações confidenciais (coisas realmente sensíveis também precisam de uma conexão segura).
Use GET se quiser que as pessoas possam marcar sua página como favorita, porque todos os dados estão incluídos no favorito.
Apenas tome cuidado com as pessoas que pressionam REFRESH com o método GET, porque os dados serão enviados novamente todas as vezes sem avisar o usuário (o POST às vezes avisa o usuário sobre o reenvio de dados).
Este documento do W3C explica o uso de HTTP GET e POST.
Eu acho que é uma fonte autorizada.
O resumo é (seção 1.3 do documento):
- Use GET se a interação for mais parecida com uma pergunta (ou seja, é uma operação segura, como consulta, operação de leitura ou pesquisa).
- Use POST se:
- A interação é mais como um pedido ou
- A interação altera o estado do recurso de uma maneira que o usuário perceberia (por exemplo, uma assinatura de um serviço) ou
- O usuário deve ser responsabilizado pelos resultados da interação.
Os métodos Get e Post não têm nada a ver com a tecnologia de servidor que você está usando, funciona da mesma maneira em php, asp.net ou ruby. GET e POST fazem parte do protocolo HTTP. Como assinalado, o POST é mais seguro. Os formulários POST também não são armazenados em cache pelo navegador. O POST também é usado para transferir grandes quantidades de dados.
O motivo do uso do POST ao fazer alterações nos dados:
Além disso, não coloque informações confidenciais na string de consulta (única opção com GET), pois elas aparecem na barra de endereços, nos favoritos e nos logs do servidor.
Espero que isso explique por que as pessoas dizem que o POST é 'seguro'. Se você estiver transmitindo dados confidenciais, deverá usar o SSL.
GET
e POST
são métodos HTTP que podem atingir objetivos semelhantes
GET
é basicamente apenas para obter (recuperar) dados, A GET
não deve ter um corpo; portanto, além dos cookies, o único lugar para passar informações é no URL e os URLs são limitados em comprimento, GET
são menos seguros em comparação com os POST
dados enviados, o URL
Nunca use GET
ao enviar senhas, cartão de crédito ou outras informações confidenciais !, Os dados são visíveis para todos na URL, podem ser dados em cache.
GET
é inofensivo quando recarregamos ou chamamos o botão de retorno, ele será marcado como livro, os parâmetros permanecem no histórico do navegador, somente caracteres ASCII são permitidos.
POST
pode envolver qualquer coisa, como armazenamento ou atualização de dados, pedido de um produto ou envio de e-mail. POST
O método tem um corpo.
POST
O método é protegido para passar informações confidenciais e confidenciais ao servidor, não ficará visível nos parâmetros de consulta no URL e os parâmetros não serão salvos no histórico do navegador. Não há restrições no comprimento dos dados. Quando estamos recarregando, o navegador deve alertar o usuário de que os dados estão prestes a ser reenviados. POST
O método não pode ser marcado como favorito
Use o método GET se desejar recuperar os recursos da URL. Você sempre pode ver a última página se pressionar o botão Voltar do seu navegador, e ele pode ser marcado como favorito, portanto, não é tão seguro quanto o método POST.
Use o método POST se desejar 'enviar' algo para o URL. Por exemplo, você deseja criar uma conta do Google e pode precisar preencher todas as informações detalhadas e clicar no botão 'enviar' (o método POST é chamado aqui), depois de enviar com êxito e tentar pressionar o botão Voltar do seu navegador , você receberá um erro ou um novo formulário em branco, em vez da última página com o formulário preenchido.
O GET
método:
É usado apenas para enviar data de 256 caracteres
Ao usar esse método, as informações podem ser vistas no navegador
É o método padrão usado pelos formulários
Não é tão seguro.
O POST
método:
É usado para enviar dados ilimitados.
Com esse método, as informações não podem ser vistas no navegador
Você pode mencionar explicitamente o POST
método
É mais seguro que o GET
método
Fornece recursos mais avançados