在Ubuntu上配置PHP安全需保持系统与PHP更新,修改php.ini关闭错误显示、禁用危险函数、限制文件上传、设置目录访问范围、强化会话Cookie、隐藏版本信息并配置OPcache,加固Apache或Nginx服务器,严格文件权限,安装Fail2Ban与ModSecurity,强制HTTPS,并定期维护监控。
Ubuntu上跑PHP,安全配置得做扎实,这件事比想象中更重要。服务器是拿来做生产环境的,不是拿来练手的,所以下面这几步,值得走一遍。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
安全的基础,是保持系统和PHP始终处于最新状态。已知漏洞的修复补丁,都藏在版本更新里。没什么好纠结的,直接运行命令:
sudo apt update && sudo apt upgrade -y
生产环境里把详细的错误信息直接显示在页面上,等于把自家房子的钥匙挂在门外。敏感信息泄露就这么来的。正确的做法是:禁止显示错误,改成写入日志文件。
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
有些PHP函数,比如eval、exec、system、shell_exec这些,一旦被利用,攻击者可以直接拿下服务器的控制权。虽然不是所有场景都需要禁用,但绝大多数Web应用用不上它们。封掉,更安心。
disable_functions = eval,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec
允许上传文件是一回事,允许上传多大的文件是另一回事。做严格的限制,防止恶意的大文件攻击。
file_uploads = On
upload_max_filesize = 2M # 单文件上限2MB
post_max_size = 8M # POST数据上限8MB
open_basedir这个参数可以限制PHP脚本能访问的目录范围。设置好了,就算某个脚本出了问题,攻击者也没法直接跑到系统其他地方去捣乱。
open_basedir = /var/www/html:/tmp
会话劫持是个老话题,但依然常见。一样一样来:让Ja vaScript访问不到会话Cookie、强制通过HTTPS传输、限制跨站请求携带Cookie、设置合理的会话过期时间。
session.cookie_httponly = On
session.cookie_secure = On
session.cookie_samesite = Strict
session.gc_maxlifetime = 1440 # 24分钟
为什么要把PHP版本号写在响应头里,告诉攻击者用什么版本的漏洞来攻击呢?关掉它。
expose_php = Off
OPcache不仅能加速PHP运行,还能让源码在缓存里保留,一定程度上减少了源码直接被读取的风险。配置一个合理的参数。
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
关闭服务器信息泄露,同时装上ModSecurity——这是Apache上最著名的Web应用防火墙之一。
# 关掉版本信息
ServerTokens Prod
ServerSignature Off
# 启用ModSecurity
sudo apt install libapache2-mod-security2
sudo a2enmod security2
sudo systemctl restart apache2
确保PHP请求通过PHP-FPM处理,配置看起来是这样子的:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
网站目录归www-data管,目录权限755,文件权限644,没什么好说的。
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
暴力破解是常见的攻击手段,Fail2Ban能自动识别并封禁那些疯狂尝试的IP。
sudo apt install fail2ban
sudo systemctl enable --now fail2ban
装完ModSecurity后,记得把规则引擎从"仅检测"切换到"开启"状态。
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
sudo sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/modsecurity/modsecurity.conf
sudo systemctl restart apache2
Let's Encrypt提供免费的SSL证书,别等了,强制HTTPS是整个配置里的必修课。
sudo apt install certbot python3-certbot-apache # 如果你用Nginx,改为python3-certbot-nginx
sudo certbot --apache -d yourdomain.com # 把yourdomain.com换成你自己的域名
sudo certbot renew --dry-run # 测试一下自动续期
安全配置从来不是做完就算的。每周跑一遍系统更新;盯着tail -f /var/log/php_errors.log看有没有异常;定期用PHPSA之类的工具扫一遍代码,检查依赖包是否存在已知漏洞。
composer global require php-security/phpsa
phpsa check /path/to/your/code
把上面这些流程走一遍,Ubuntu环境下的PHP安全性会提升一个层次。当然,具体配置还得根据你的业务场景微调,比如上传文件大小、会话有效期这些。安全这件事,没有终点,但起点至少得站得稳。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述