nginx 및/또는 php에 디렉토리별 명령을 해석하도록 *하지 말라고 지시하시겠습니까?

nginx 및/또는 php에 디렉토리별 명령을 해석하도록 *하지 말라고 지시하시겠습니까?

저는 새로운 웹사이트를 침투 테스트 중이고 Weevely를 사용하여 PHP 페이로드를 생성했습니다. 사용자가 내 웹사이트에 이미지를 업로드할 수 있는 이미지에 직접 수동으로 삽입했습니다. .NET에서 Weevely 페이로드에 대한 역방향 연결을 설정할 수 있습니다 /images. nginx 및/또는 php에 알릴 수 있습니까?~ 아니다/images 디렉토리에서 오는 명령을 해석하려면? 파일 유효성 검사를 통해 보안 입력 메커니즘을 올바르게 코딩하는 것 외에 특정(/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

질문이 불분명합니다. "명령 해석"이란 무엇을 의미합니까? Nginx는 파일을 제공하고 PHP와 같은 다른 서버나 서비스에 대한 요청을 프록시합니다. PHP는 스크립트를 실행합니다.

내 생각에는 이미지 디렉토리가 PHP 스크립트를 실행하지 않고 파일만 제공하기를 원한다고 생각합니다.

캐싱 헤더를 추가했습니다. Pragma는 오래되었으므로 사용할 필요가 없습니다.

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
}

관련 정보