在过去几天里,我的其中一台服务器遭到了几次黑客攻击(似乎失败了,但不能确定,因为如果有人真正获得了访问权限,就可以抹去痕迹),之后我决定稍微加强一下安全性。
项目基于symfony 4,架构比较标准,服务器是nginx,php-fpm作为解释器。
我想做的 (许多) 更改之一是不允许任何 .php 调用 (因为所有流量都会路由到 index.php,而这应该是 php 直接解释的唯一文件)。因此,我想出了以下配置:
server {
listen 80 443;
# https config here
server_name epicServer.com;
root /var/www/html/epicProject/public;
location / {
try_files $uri /index.php$is_args$args; # This should route towards index.php
}
location ~ index\.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param APPLICATION_ENV "production";
include fastcgi_params;
fastcgi_read_timeout 300;
# This should interpret index.php and do stuff
}
location ~ \.php$ {
deny all; # This should deny any other php file directly accessed
}
}
关于这个配置我有两个问题:
是否有任何方法可以让某人继续执行与 symfony 路由不匹配的 php 文件(基本上...我是否遗漏了什么?)?我试图缓解的情况是“好吧,有人设法上传了 php-shell(我对此采取了不同的措施,这是另一个话题);他应该无法执行它”。
它是否易受 CVE-2019-11043 攻击?乍一看似乎没有,但我不确定(我确实将 php 升级到了 7.3.11,所以应该没关系,但只是为了让我安心,即使在 7.3.9 上,这是否易受攻击?)