Estoy probando mi nuevo sitio web y lo usé weevely para generar una carga útil de PHP. Lo coloco manualmente en las imágenes directamente donde los usuarios podrán cargar imágenes en mi sitio web. Puedo establecer una conexión inversa con la carga útil de weevely en formato /images
. ¿Es posible decirle a nginx y/o php?nointerpretar comandos provenientes del directorio /images? Además de codificar correctamente[1] un mecanismo de entrada seguro con validaciones de archivos, ¿hay algo más que podamos hacer para evitar que las cargas se ejecuten en directorios específicos (/images)?
[1]https://php.earth/doc/security/uploading
user www-data;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
charset utf-8;
server_tokens off;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Frame-Options DENY;
add_header Referrer-Policy "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Pragma public;
add_header Cache-Control "public";
include /etc/nginx/conf.d/*.conf;
gzip on;
gzip_comp_level 2;
gzip_min_length 1000;
server {
listen 127.0.0.1:80;
server_name website.com;
root /var/www/website/;
index index.php index.html;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_param HTTP_PROXY "";
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
}
location ~* .(png|ico|gif|jpg|jpeg|css|html|txt|php)$ {
expires 2d;
add_header Pragma public;
add_header Cache-Control "public";
}
if ($request_method !~ ^(GET|POST)$) {
return 444;
}
}
}
Respuesta1
La pregunta no está clara. ¿Qué quieres decir con "interpretar comandos"? Nginx sirve archivos y solicitudes de proxy a otros servidores o servicios, como PHP. PHP ejecuta scripts.
Creo que desea que el directorio de imágenes solo sirva archivos, no ejecute scripts PHP.
Agregué mis encabezados de almacenamiento en caché. Pragma es viejo, no es necesario usarlo.
location \images
root \whatever;
add_header Cache-Control "public, max-age=691200, s-maxage=691200";
more_clear_headers Server; more_clear_headers "Pragma"; more_clear_headers "Expires";
}
Alternativamente, puedes usar algo como la respuesta aesta pregunta:
location ~ /images/(.+)\.php$ {
deny all;
}
location ~ \.php$ {
// as above
}