Negar acesso ao site, com base em QUERY_STRING

1

Meu site está "sob ataque": bots de muitos IPs diferentes estão preenchendo um formulário com conteúdo de spam.

Os endereços IP não podem ser filtrados, eles são sempre diferentes, então eu estava pensando em filtrar por QUERY_STRING, para corresponder a um URI assim:

www.site.com/search?field1=spamword&field2=another_spamword

A regra:

rewritecond %{QUERY_STRING} ^(.*)spamword(.*)$
rewriterule .* - [F,L]

A expressão regular parece certa, mas a regra nunca é executada. Alguma idéia do que está acontecendo?

Obrigado.

    
por UVL 25.07.2010 / 21:12

2 respostas

1

Eu não pude habilitar o registro de reescrita, então encontrei outra maneira, e fiz isso diretamente em todas as páginas com um formulário:

if ( strlen( $_SERVER['REQUEST_URI'] )>650 ) {
    header('HTTP/1.0 401 Unauthorized'); 
    .. error message to not panic real users ...
    exit;
}

Porque eu encontrei (observando os logs de acesso e considerando os campos do formulário) que um URL com mais de 650 caracteres nunca é uma solicitação válida. (o tamanho médio era 4-6 Kb)

Infelizmente, o problema de regex ainda está lá e não conseguiu resolvê-lo. Mas pelo menos o problema foi parcialmente resolvido (os bots ainda estão lá, mas a página usa muito poucos recursos, já que nenhuma pergunta é feita)

Felizmente, os bots reconhecerão o erro 401 e desistirão.

    
por 28.07.2010 / 14:46
0

Afora o comentário do @Wrikken (verifique o log e veja se RewriteEngine é on ), a única coisa que pode estar errada é a regex. Tente remover o ():

RewriteCond %{QUERY_STRING} ^.*spamword.*$
    
por 26.07.2010 / 08:40