Estou criando uma API segura baseada na Web que usa HTTPS; no entanto, se eu permitir que os usuários o configurem (incluindo o envio de senha) usando uma string de consulta, isso também será seguro ou devo forçá-lo a ser feito por meio de um POST?
ssl
https
query-string
John
fonte
fonte
History caches in browsers
ou adicionar alguma referência para ir?Do ponto de vista "cheirar o pacote de rede", uma solicitação GET é segura, pois o navegador primeiro estabelece a conexão segura e envia a solicitação contendo os parâmetros GET. Porém, os URLs GET serão armazenados no histórico / preenchimento automático do navegador dos usuários, o que não é um bom local para armazenar, por exemplo, dados de senha. É claro que isso só se aplica se você seguir a definição mais ampla de "Serviço da Web" que pode acessar o serviço a partir de um navegador, se você acessá-lo apenas do seu aplicativo personalizado, isso não deve ser um problema.
Portanto, deve-se usar o post pelo menos para caixas de diálogo com senha. Além disso, como apontado no link que a littlegeek postou, um URL GET provavelmente será gravado nos logs do servidor.
fonte
A razão por trás disso é que as cadeias de consulta fazem parte do protocolo HTTP, que é um protocolo da camada de aplicativos, enquanto a parte de segurança (SSL / TLS) vem da camada de transporte. A conexão SSL é estabelecida primeiro e, em seguida, os parâmetros de consulta (que pertencem ao protocolo HTTP) são enviados ao servidor.
Ao estabelecer uma conexão SSL, seu cliente executará as seguintes etapas em ordem. Suponha que você esteja tentando fazer login em um site chamado example.com e deseje enviar suas credenciais usando parâmetros de consulta. Seu URL completo pode se parecer com o seguinte:
example.com
para um endereço IP(124.21.12.31)
usando uma solicitação DNS. Ao consultar essas informações, apenas informações específicas do domínio são usadas, ou seja, somenteexample.com
serão usadas.124.21.12.31
e tentará se conectar à porta 443 (porta de serviço SSL, não a porta HTTP padrão 80).example.com
enviará seus certificados para o seu cliente.Portanto, você não expõe dados confidenciais. No entanto, enviar suas credenciais por uma sessão HTTPS usando esse método não é a melhor maneira. Você deve optar por uma abordagem diferente.
fonte
(e.g http://example.com/login?username=alice&password=12345)
.Sim. O texto inteiro de uma sessão HTTPS é protegido por SSL. Isso inclui a consulta e os cabeçalhos. Nesse aspecto, um POST e um GET seriam exatamente os mesmos.
Quanto à segurança do seu método, não há como dizer sem uma inspeção adequada.
fonte
O SSL primeiro se conecta ao host, para que o nome do host e o número da porta sejam transferidos como texto não criptografado. Quando o host responde e o desafio é bem-sucedido, o cliente criptografa a solicitação HTTP com a URL real (ou seja, qualquer coisa após a terceira barra) e a envia ao servidor.
Existem várias maneiras de quebrar essa segurança.
É possível configurar um proxy para atuar como um "homem do meio". Basicamente, o navegador envia a solicitação para conectar-se ao servidor real ao proxy. Se o proxy estiver configurado dessa maneira, ele se conectará via SSL ao servidor real, mas o navegador ainda conversará com o proxy. Portanto, se um invasor puder obter acesso ao proxy, poderá ver todos os dados que fluem por ele em texto não criptografado.
Seus pedidos também serão visíveis no histórico do navegador. Os usuários podem ficar tentados a marcar o site como favorito. Alguns usuários têm ferramentas de sincronização de favoritos instaladas, portanto, a senha pode acabar em deli.ci.us ou em outro local.
Por fim, alguém pode ter hackeado o seu computador e instalado um registrador de teclado ou um raspador de tela (e muitos vírus do tipo Trojan Horse o fazem). Como a senha é visível diretamente na tela (ao contrário de "*" em um diálogo de senha), isso é outra falha de segurança.
Conclusão: Quando se trata de segurança, confie sempre no caminho batido. Há muita coisa que você não sabe, não vai pensar e que irá quebrar seu pescoço.
fonte
Sim, desde que ninguém esteja olhando por cima do ombro para o monitor.
fonte
Não concordo com a declaração sobre o vazamento [...] do referenciador HTTP (uma imagem externa na página de destino pode vazar a senha) na resposta de Slough .
O HTTP 1.1 RFC afirma explicitamente :
De qualquer forma, os logs do servidor e o histórico do navegador são razões mais do que suficientes para não colocar dados confidenciais na string de consulta.
fonte
Sim, a partir do momento em que você estabelece uma conexão HTTPS, tudo é seguro. A string de consulta (GET) como o POST é enviada por SSL.
fonte
Você pode enviar a senha como parâmetro de hash MD5 com um pouco de sal adicionado. Compare-o no lado do servidor para autenticação.
fonte