Problemas potenciais com o formato de log delimitado por tabulações para o apache 2.2x?

2

Meu empregador tem um manipulador canalizado do CustomLog que reduz e prepara os logs de acesso da máquina de conteúdo da web estática para um formato que é kosher para ser despejado no hadoop / hive. Infelizmente, depende de um regex para converter o formato de log junto com uma lógica um pouco complicada para lidar com o pior que a Internet pode lançar nele.

A correção é substituir o script atual e tornar todo o pipeline mais durável. Uma ideia que tive foi acabar com a parte de regex e fazer algo como:

LogFormat "%v:%p\t%h\t%l\t%u\t%t\t\"%r\"\t%>s\t%O\t\"%{Referer}i\"\t\"%{User-Agent}i\"" vhost_combined_tabs

O truque é que CADA campo seria delimitado por tabulações. Assim, em uma linguagem de script, uma divisão simples em "\ t" poderia interromper o log de acesso de maneira confiável. Mesmo que um dos campos retorne como "", a guia manterá a integridade do registro.

O problema é que não encontrei nada no google que mencionasse isso. Para mim parece intuitivo quebrar o trabalho da fonte em vez de ter um script lidar com o problema. Estou faltando alguma coisa aqui?

    
por David 19.10.2010 / 22:09

1 resposta

2

Eu não acho que você esteja perdendo nada, a questão óbvia é que nenhum dos campos de dados não citados deve ter qualquer possibilidade de conter o caractere separador. Se algum dos campos de dados citados puder conter seu caractere separador, será necessário usar um método menos eficiente para separar os campos posteriormente.

Tab deve ser relativamente seguro

Note that in httpd 2.0 versions prior to 2.0.46, no escaping was performed on the strings from %...r, %...i and %...o. This was mainly to comply with the requirements of the Common Log Format. This implied that clients could insert control characters into the log, so you had to be quite careful when dealing with raw log files.

For security reasons, starting with 2.0.46, non-printable and other special characters are escaped mostly by using \xhh sequences, where hh stands for the hexadecimal representation of the raw byte. Exceptions from this rule are " and \ which are escaped by prepending a backslash, and all whitespace characters which are written in their C-style notation (\n, \t etc).

link

    
por 20.10.2010 / 13:04