按照网上的默认配置是整个网站都可以执行 php 文件。
我们这里将限制php的执行权限到最小的情况。
1、因为一般php框架开发的程序,只有一个index.php的入口文件。
所以我们按最小权限配置,只允许 根目录的index.php 可以执行,其它php文件都禁止执行
[复制到剪贴板] |
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;
}
# 注意 这里不要 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 {
}
}
2、其它的php系统,也大都只会要求根目录的php文件可以执行
这样可以配置只允许根目录可以执行php
修改方式 location /index.php 修改为如下:
location ~ ^/[^/]+\.php$ 即可
修改方式 location /index.php 修改为如下:
location ~ ^/[^/]+\.php$ 即可
权限限制后还需要注意数据安全漏洞,使用php框架的系统基本不用考虑
网站可以访问目录中如果还存在其它php,当用户访问时会作为静态文件直接返回。
对于php框架来说,其它php都在public目录之外,是无法直接访问的,不会出现这种问题。
对于其它php系统来说,就需要注意了。这种情况要防止 php 文件中的信息泄漏。
对于存储安全信息的php配置文件,建议放置到 网站目录以外,让用户无法访问。
具体的可以参考一些php框架的目录结构。
对于php框架来说,其它php都在public目录之外,是无法直接访问的,不会出现这种问题。
对于其它php系统来说,就需要注意了。这种情况要防止 php 文件中的信息泄漏。
对于存储安全信息的php配置文件,建议放置到 网站目录以外,让用户无法访问。
具体的可以参考一些php框架的目录结构。
可以参考 限制nginx目录中php的执行权限后防止php文件数据泄漏 进行配置,禁止php文件下载。