Capture barras invertidas, aspas simples e duplas em solicitações GET

Capture barras invertidas, aspas simples e duplas em solicitações GET

De acordo com issoNoções básicas de injeção SQLartigo:

<…> as operações mais usadas para quebrar/difundir as consultas SQL são.

  • 'Citação única
  • "Citação dupla
  • \Barra invertida (caractere de escape do MySQL)

Às vezes também existem caracteres codificados em hexadecimal (por exemplo 0x3a3a).

Quero registrar e descartar todas as solicitações que os contenham. Aqui é onde estou até agora:

set $susp 0;
if ($request_uri ~ "%27") {
  set $susp 1;
}
location ~ \.php {
    if ($susp = 1) {
        access_log /var/log/nginx/for-review.log;
        return 500;
    }
    # further fastcgi configuration
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

(Eu entendi aquilose é mau, mas éparecia necessário)

Isso não é acionado /foo/ba'r, mas pelo menos funciona bem /?foo=b'ar. Mas é isso: os outros personagens que tento também não são acionados.

Aqui está o que eu tentei:

  • $request_uri ~ "%27|%22": simples funciona, duplo não
  • $request_uri ~ "%27|\"": simples funciona, duplo não
  • $request_uri ~ "%27|0x": ambos funcionam, mas 0xobtêm falsos positivos empolegar=230x240

E nem tenho certeza de como abordar a barra invertida.

Vocês sabem como fazer isso funcionar?

PS Pensei em usarAmazon ERA, mas requer outro serviço (Cloudflare ou balanceador de carga) para o qual ainda não estou pronto.

PS: Entendo que outras medidas precisam ser tomadas; isso supostamente elimina aquelas varreduras GET irritantes. Também duvido que os visitantes legítimos acabem tendo isso enquanto navegam. Minha lógica era esta: qualquer barreira que complicasse o hack ajuda

Responder1

O principal nginx.conf, abaixo http {}:

# set the variable
map "$request_uri" $susp {
    default 0;
    "~*(?<suspm>(\\x|%)(3c|3e|5c|22|27)+)" 1;
}
# match logging
log_format suspl '$remote_addr /$suspm/ - $remote_user $host [$time_local] '
    '"$request" $status $body_bytes_sent '
    '"$http_referer" "$http_user_agent" "$http_cookie"';

Configuração de host virtual individual:

location / {
    if (\$susp = 1) {
        access_log /var/log/suspl.log suspl;
        return 403;
    }
    # etc…
}

Também,

Duvido que os visitantes legítimos acabem tendo isso enquanto navegam

Atenção: acontece que eles carregam algo parecido %7B%22em seus cookies definidos por alguns (não todos) softwares de rastreamento/análise.

informação relacionada