Я тестирую свой новый веб-сайт и использую его еженедельно для создания полезной нагрузки php. Я вручную помещаю его в изображения, где пользователи смогут загружать изображения на мой сайт. Я могу установить обратное соединение с полезными данными в /images . Можно ли сказать, что nginx и / или php не должны интерпретировать команды, поступающие из каталога / images? Кроме правильного [1] кодирования механизма безопасного ввода с проверкой файлов, есть ли что-то еще, что мы можем сделать, чтобы предотвратить выполнение полезных нагрузок в определенных (/ 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;
    }
    }
}

1 ответ1

0

Вопрос неясен. Что вы подразумеваете под "интерпретировать команды". Nginx обслуживает запросы файлов и прокси на другие серверы или службы, такие как PHP. PHP запускает скрипты.

Я думаю, вы хотите, чтобы каталог images просто обслуживал файлы, а не запускал сценарии PHP.

Я добавил свои заголовки кэширования. Прагма старая, вам не нужно ее использовать.

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

В качестве альтернативы вы можете использовать что-то вроде ответа на этот вопрос:

location ~ /images/(.+)\.php$ {
  deny all;
}
location ~ \.php$ {
  // as above
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .