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, pero0x
obtienen 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%22
en sus cookies establecidas por algún (no todos) software de seguimiento/análisis.