Formato para correspondência de padrões hdr_sub

3

Eu estou tentando combinar o valor de um cabeçalho que tem um espaço nele e não consigo descobrir quais expressões de expressões regulares o haproxy gosta. O cabeçalho que eu estou depois é assim:

X-Request-ID:'Foo: Bar'

Eu estaria Ok para combinar exatamente este cabeçalho ou qualquer coisa que comece com ele. No entanto, eu não quero corresponder 'Foo: Other' Minhas tentativas até agora:

acl badhdr hdr_sub(X-Request-ID) -i Foo: Bar

Correspondeu tudo o que começa com Foo

acl badhdr hdr_sub(X-Request-ID) -i Foo:\sBar

não combinou 'Foo: Bar' em tudo ...

Ajuda muito apreciada

    
por Yana K. 22.09.2016 / 16:57

2 respostas

2

Estou quase inclinado a pensar que o fato de o HAProxy aceitar isso ...

acl badhdr hdr_sub(X-Request-ID) -i Foo: Bar

... pode ser um bug, e "Bar" está sendo descartado silenciosamente. Eu teria que pesquisar mais para ter certeza, mas a maneira correta de expressar isso seria um espaço escapado com uma barra invertida ...

acl badhdr hdr_sub(X-Request-ID) -i Foo:\ Bar

... ou para colocar a expressão entre aspas ...

acl badhdr hdr_sub(X-Request-ID) -i "Foo: Bar"

Observe que _sub não é regex - é apenas correspondência de substring. Você pode querer hdr_beg - substring inicial.

Para um regex ancorado, incluindo o início ' (assumindo que é parte do cabeçalho, como parece ser a partir da pergunta, também precisa ser escapado), acredito que a expressão seria esta:

acl badhdr hdr_reg(X-Request-ID) -i ^\'Foo:\ Bar
    
por 23.09.2016 / 01:13
1

De acordo com a documentação , hdr_sub aceita correspondências de substring como um parâmetro.

De acordo com a documentação sobre a manipulação do cabeçalho HTTP (o mesmo link), os regexes de substring são um pouco não convencionais:

\t   for a tab
\r   for a carriage return (CR)
\n   for a new line (LF)
\    to mark a space and differentiate it from a delimiter
\#   to mark a sharp and differentiate it from a comment
\   to use a backslash in a regex
\\ to use a backslash in the text (*2 for regex, *2 for haproxy)
\xXX to write the ASCII hex code XX as in the C language

Assim, isso deve funcionar para você:

acl badhdr hdr_sub(X-Request-ID) -i Foo:\ Bar
    
por 23.09.2016 / 11:23