Redirecionar usuários logados para https, anônimos para http usando Varnish + Apache

1

Eu tenho um servidor com o Varnish na frente do Apache na frente do Drupal.

O que eu gostaria de fazer é redirecionar meu formulário de login para https (bastante fácil), e redirecionar todos os usuários logados (autenticados) para https o tempo todo, enquanto os visitantes anônimos são redirecionados para http o tempo todo (por razões de desempenho).

Não quero que usuários autenticados tenham uma experiência de modo misto se clicarem em um link absoluto para o link - & gt ; então essa é a razão para sempre redirecionar os usuários autenticados para https se o protocolo não for https.

É possível fazer algo assim usando alguma combinação de configuração Varnish + Apache? Ou é a única solução aqui para ir https o tempo todo para todos os visitantes (que é um desempenho desnecessário atingido por todos os visitantes anônimos).

Para o ponto de referência, estou usando um Varnish vcl com base neste exemplo sensível ao Drupal padrão fornecido por Four Kitchens: link

    
por Jordan Magnuson 29.03.2014 / 22:24

1 resposta

1

O que você está tentando fazer é muito difícil de acertar. Se você cometer um erro ao usar o http e usar https, poderá abrir vários problemas de segurança.

Minha recomendação seria configurar um http vserver no apache, que redireciona para o mesmo URL https e não faz mais nada. Não precisa nem descobrir se o URL existe ou não, ele apenas redireciona o tempo todo. Em seguida, tem outro vserver https, que tem o conteúdo real do site.

Lembre-se de marcar todos os cookies como seguros, para que você não vaze cookies em conexões http.

Se você insistir em responder pelo http para os usuários, que não estão conectados. Então você precisará de um cookie inseguro, que informa se o usuário está logado ou não. Não coloque nenhum dado nesse cookie, apenas armazene se o usuário estiver logado ou não. Você poderia usar 0 ou 1 como o valor armazenado. Ou você poderia usar um valor constante, em cujo caso a existência do cookie significa que o usuário está logado e ausência significa que o usuário não está logado.

No lado do http, você redireciona para https se um desses dois critérios for satisfeito. Existe um cookie indicando que o usuário está logado ou o URI da solicitação requer login. Quando a requisição https for recebida, você terá que fazer verificações adicionais para validar se o usuário está realmente logado. Para isso você usa um cookie seguro, que não pode ser adivinhado por alguém de fora. Se o usuário não estiver logado, você redirecionará de volta para http, se o URL não exigir login e, nesse estágio, instruirá o navegador a excluir o cookie inseguro, que indicava incorretamente que o usuário estava logado.

É muito importante garantir que esses redirecionamentos não sejam armazenados em cache. Você não quer absolutamente que um navegador armazene em cache ambos os redirecionamentos da versão http de um URL para a versão https e vice-versa.

    
por 29.03.2014 / 23:17