Filtragem de URL do verniz composto com params de consulta

1

Eu tenho uma instância do WordPress com o Varnish na frente no qual eu bloqueei o acesso a wp-login.php via VCL usando:

sub vcl_recv {
    # block outside access to login
    if (req.url ~ "wp-admin" && !client.ip ~ white_list) {
        return (synth(404, "Page not found"));
    }
 }    

Para referência, white_list é apenas um arquivo incluído com uma lista de IPs da lista branca. Até este ponto, isso funcionou muito bem.

Meu cliente solicitou recentemente o uso de páginas protegidas do WordPress para uma página protegida por senha. Descobri que esse método usa /wp-login.php?action=postpass para validar a senha. Devido ao meu bloco whitelist de wp-login.php alguns (não todos, o que é estranho), os pedidos retornam como 404.

Isso significa que todas as solicitações para /wp-login.php?action=postpass devem ser passadas e todas as solicitações para wp-login.php nas quais o IP solicitante não corresponde ao white_list devem ser negadas. O que eu comecei foi:

sub vcl_recv {
    # allow wp protected pages
    if (req.url ~ "wp-login" && req.url ~ "\?action\=postpass$") {
      return(pass);
    } else if (req.url ~ "wp-(admin|login)" && !client.ip ~ white_list) {
       return(synth(404, "Page not found"));
    }
}

Isso me parece que deveria funcionar, mas não funciona. Como está, esta regra permite todo o acesso a wp-login.php , independentemente do white_list . Eu removi temporariamente && !client.ip ~ white_list para manter o bloqueio, mas estou perplexo com o motivo de essa parte da condicional ter sido falsa quando ela já funcionou antes.

    
por Chase 13.02.2018 / 02:21

0 respostas

Tags