我的网站已被一名用户入侵,他上传了一张包含 PHP 代码的图片。此代码允许上传文件,而他上传了一个恶意的 PHP 脚本。
他能够通过以下 URL 上的 GET 来调用他的“image-php”:
http://mypwnedwebsite.com/image.jpg/.php
我该如何配置 nginx 来防止这种行为?我的意思是,用一个简单的/.php
,它就表现得好像一切都是 PHP,从我的角度来看这是错误的。
我实际上有一个“经典”的 nginx 1.6.2 配置,我认为这部分是最相关的:
location ~ \.php$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 120;
include /etc/nginx/fastcgi_params;
}
答案1
这应该可行。
location ~ \.php$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 120;
include /etc/nginx/fastcgi_params;
try_files $uri $uri/ /404.html;
}
它会尝试查找 $uri,如果不是文件夹,则会抛出 404 错误。