Capte barras invertidas, comillas simples y dobles en solicitudes GET

Capte barras invertidas, comillas simples y dobles en solicitudes GET

De acuerdo a estoConceptos básicos de la inyección SQLartículo:

<…> las operaciones más utilizadas para descifrar/difuminar las consultas SQL son.

  • 'Una frase
  • "Cotización doble
  • \Barra invertida (carácter de escape de MySQL)

A veces también hay caracteres codificados en hexadecimal (p. ej. 0x3a3a).

Quiero registrar y descartar todas las solicitudes que las contengan. Aquí es donde estoy hasta ahora:

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;
}

(Entiendo quesi es malo, peroparecía necesario)

Esto no se activa /foo/ba'r, pero al menos funciona bien /?foo=b'ar. Pero eso es todo: los otros personajes que pruebo tampoco se activan.

Esto es lo que he probado:

  • $request_uri ~ "%27|%22": simple funciona, doble no
  • $request_uri ~ "%27|\"": simple funciona, doble no
  • $request_uri ~ "%27|0x": ambos funcionan, pero 0xobtienen falsos positivospulgar=230x240

Y ni siquiera estoy seguro de cómo abordo la barra invertida.

¿Saben cómo hacerlo funcionar?

PD Pensé en usarAmazonas era, pero requiere otro servicio (Cloudflare o balanceador de carga) para el cual aún no estoy preparado.

PD: Me doy cuenta de que es necesario tomar otras medidas; Se supone que esto eliminará esos molestos escaneos GET. También dudo que los visitantes legítimos terminen teniendolos mientras navegan. Mi lógica era la siguiente: cualquier barrera que complique el truco ayuda

Respuesta1

El principal nginx.conf, bajo 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"';

Configuración de host virtual individual:

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

También,

Dudo que los visitantes legítimos terminen teniendolos mientras navegan.

Atención: resulta que contienen algo así como %7B%22en sus cookies establecidas por algún (no todos) software de seguimiento/análisis.

información relacionada