保持系统和软件更新
定期更新Debian系统及PHP相关软件包(如PHP核心、扩展、Web服务器),及时修补已知安全漏洞。可使用sudo apt update && sudo apt upgrade -y命令更新系统,通过unattended-upgrades包配置自动安全更新,确保服务器始终运行最新版本。
配置PHP核心安全参数
修改php.ini文件,禁用错误显示(display_errors = Off)以防止敏感信息泄露,关闭PHP版本信息暴露(expose_php = Off),限制文件系统访问(open_basedir = /var/www:/tmp,仅允许访问Web目录和临时目录),禁止远程资源访问(allow_url_fopen = Off、allow_url_include = Off,防止远程文件包含攻击)。同时,关闭register_globals(避免表单数据自动注册为全局变量),降低脚本注入风险。
强化Web服务器配置
若使用Apache,可通过php-fpm配置PHP进程池(如修改/etc/php/8.2/fpm/pool.d/www.conf中的listen指令为0.0.0.0:9000),并重启服务;若使用Nginx,需正确配置PHP处理(如location ~ \.php$块中指定fastcgi_pass为PHP-FPM socket)。确保Web服务器仅响应合法请求,避免路径遍历或非法文件访问。
安装安全扩展与工具
安装Suhosin扩展(wget http://download.suhosin.org/suhosin-0.9.37.1.tar.gz,编译安装后添加extension=suhosin.so到php.ini),增强PHP对缓冲区溢出、格式化串等漏洞的防护。还可部署PHPIDS(入侵检测系统)检测常见Web攻击,或使用CrowdSec作为“门卫”阻止恶意请求。
实施Web应用安全最佳实践
对所有用户输入进行严格验证(如使用filter_var函数过滤邮箱、URL)和净化(如htmlspecialchars转义HTML特殊字符),防止XSS攻击;使用预处理语句(如PDO的prepare方法)和参数化查询,杜绝SQL注入;设置内容安全策略(CSP,通过Content-Security-Policy头部限制脚本来源),降低XSS风险;为表单添加CSRF令牌(如Laravel的@csrf指令),验证请求合法性;避免使用eval()、exec()等危险函数,减少代码执行风险。
配置系统与网络防护
使用ufw或iptables配置防火墙,仅允许HTTP(80端口)、HTTPS(443端口)和SSH(22端口)流量,拒绝其他非法连接(如sudo ufw allow 80/tcp && sudo ufw allow 443/tcp && sudo ufw allow 22/tcp)。强化SSH安全:禁用root远程登录(修改/etc/ssh/sshd_config中的PermitRootLogin no),使用SSH密钥对认证(替代密码登录),限制空密码登录(PasswordAuthentication no),并重启SSH服务。
定期审计与监控
定期检查系统日志(/var/log/syslog)和PHP错误日志(/var/log/php_errors.log),识别异常请求(如大量404错误、SQL注入尝试);使用Logwatch生成每日日志报告,或配置Fail2ban自动封禁频繁攻击的IP地址(如针对SSH登录失败的IP),及时响应潜在威胁。