中我们通过配置限制了php文件执行的权限,只有在限制范围内的php文件可以执行。
新的问题:网站目录中的其它php文件虽然不能执行,但是可以作为静态文件被直接下载。
注意可能会导致一些php文件中的配置数据泄漏。
之前的文章中只介绍了通过改变目录结构的方式来防止数据泄漏。
这里我们还是可以通过nginx的配置来进行限制,这样可以避免修改php系统的代码。
在原来的配置中增加如下红色配置,注意该配置需要放置的允许php执行的配置后面。
完整的配置文件如下:
location ~ \.php$ {
deny all;
}
deny all;
}
完整的配置文件如下:
[复制到剪贴板] |
server{
listen 80;
server_name www.rickw.cn rickw.cn;
root /var/www/htdocs/public;
index index.htm index.html index.php;
# 只允许 index.php 有php脚本的执行权限
location /index.php {
fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
fastcgi_intercept_errors on;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php-fpm;
}
location / {
# 这里是处理 CodeIgniter4 中的URL重写
try_files $uri $uri/ /index.php;
}
# 这里设置其它 php 文件禁止用户访问
location ~ \.php$ {
deny all;
}
# 注意 这里不要 include 其它默认配置,避免其它配置中有php的执行权限.
# 不要 include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}