温馨提示×

如何在CentOS上配置PHP的安全设置

小樊
45
2025-11-01 12:17:40
栏目: 编程语言

如何在CentOS上配置PHP安全设置

在CentOS上配置PHP安全需从系统基础加固PHP核心配置Web服务器防护扩展与监控等多维度入手,以下是具体步骤:

1. 更新系统与PHP至最新版本

保持系统和PHP最新是防范已知漏洞的关键。执行以下命令更新所有软件包:

sudo yum update -y
sudo yum install epel-release -y  # 启用EPEL仓库(可选,用于安装额外PHP扩展)

安装或更新PHP及相关扩展(如MySQL、GD、MBString等):

sudo yum install php php-cli php-fpm php-mysqlnd php-gd php-mbstring php-xml php-bcmath -y

2. 配置PHP-FPM安全参数

若使用PHP-FPM(常见于Nginx/Apache反向隧道场景),需修改其池配置文件(通常为/etc/php-fpm.d/www.conf),关键设置如下:

  • 限制运行用户:避免使用root用户,改用apachenginx等非特权用户:
    user = apache
    group = apache
    
  • 限制进程数量:根据服务器资源调整pm.max_children(如50),防止资源耗尽攻击:
    pm.max_children = 50
    pm.start_servers = 5
    pm.min_spare_servers = 5
    pm.max_spare_servers = 35
    
  • 禁用危险函数:禁止执行系统命令、文件操作等高危函数:
    disable_functions = eval,assert,system,shell_exec,passthru,exec,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
    
  • 限制文件扩展名:仅允许解析PHP相关文件,防止恶意脚本执行:
    security.limit_extensions = .php .php3 .php4 .php5 .phtml
    

修改后重启PHP-FPM:

sudo systemctl restart php-fpm

3. 调整PHP.ini核心安全选项

编辑主配置文件/etc/php.ini,强化以下关键参数:

  • 关闭错误显示:防止敏感信息(如数据库凭据、路径)泄露给用户,仅记录日志:
    display_errors = Off
    log_errors = On
    error_log = /var/log/php_errors.log  # 确保目录可写
    
  • 限制文件上传:约束上传文件大小(如2M),防止大文件攻击或恶意文件上传:
    file_uploads = On
    upload_max_filesize = 2M
    post_max_size = 8M
    
  • 强化会话安全:通过Cookie属性防止会话劫持:
    session.cookie_httponly = On  # 禁止JavaScript访问Cookie
    session.cookie_secure = On    # 仅通过HTTPS传输Cookie(需启用HTTPS)
    session.cookie_samesite = Strict  # 限制跨站请求携带Cookie
    session.gc_maxlifetime = 1440  # 会话有效期(分钟)
    
  • 禁用危险特性:关闭远程文件包含、本地文件包含等风险功能:
    allow_url_fopen = Off
    allow_url_include = Off
    
  • 使用强密码哈希:推荐使用bcrypt算法存储密码:
    password_hash_default = bcrypt
    

4. 配置Web服务器安全

根据使用的Web服务器(Apache/Nginx),调整配置以减少攻击面:

Apache配置

编辑虚拟主机或全局配置文件(如/etc/httpd/conf/httpd.conf/etc/httpd/conf.d/php.conf),添加以下指令:

  • 禁用目录列表:防止未配置索引文件时暴露目录结构:
    <Directory "/var/www/html">
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    
  • 限制.htaccess覆盖:防止恶意修改.htaccess文件:
    <Directory "/var/www/html">
        AllowOverride None  # 仅在必要时开启(如需要URL重写)
    </Directory>
    
Nginx配置

编辑虚拟主机配置文件(如/etc/nginx/conf.d/default.conf),添加以下指令:

  • 限制PHP文件访问:禁止访问隐藏文件(如.htaccess):
    location ~ /\.ht {
        deny all;
    }
    
  • 传递正确脚本路径:确保PHP文件由PHP-FPM处理:
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php-fpm/www.sock;  # 根据实际路径调整
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    

5. 配置防火墙限制访问

使用firewalld仅开放必要的HTTP(80)和HTTPS(443)端口,阻止非法IP访问:

sudo yum install firewalld -y
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

6. 启用HTTPS加密传输

通过SSL/TLS加密网站流量,防止数据在传输过程中被窃取或篡改。使用mod_ssl模块(Apache)或Nginx原生支持配置HTTPS:

  • 安装mod_ssl(Apache):
    sudo yum install mod_ssl openssl -y
    
  • 生成自签名证书(测试用,生产环境需使用CA颁发的证书):
    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/apache-selfsigned.key -out /etc/pki/tls/certs/apache-selfsigned.crt
    
  • 配置Apache虚拟主机(编辑/etc/httpd/conf.d/ssl.conf):
    <VirtualHost *:443>
        ServerName yourdomain.com
        DocumentRoot /var/www/html
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/apache-selfsigned.crt
        SSLCertificateKeyFile /etc/pki/tls/private/apache-selfsigned.key
    </VirtualHost>
    
  • 重启Web服务器
    sudo systemctl restart httpd  # Apache
    # 或
    sudo systemctl restart nginx  # Nginx
    

7. 安装Web应用防火墙(WAF)

使用ModSecurity(开源WAF)拦截SQL注入、XSS、CSRF等常见攻击:

sudo yum install mod_security -y
sudo systemctl enable mod_security
sudo systemctl start mod_security

默认规则集可通过OWASP ModSecurity Core Rule Set (CRS)增强,需额外下载并配置。

8. 定期备份与监控

  • 备份网站数据与数据库:使用rsyncmysqldump定期备份,存储到异地或云存储:
    rsync -avz --delete /var/www/html/ /backup/website_backup/
    mysqldump -u root -p your_database | gzip > /backup/db_backup.sql.gz
    
  • 监控日志与异常:使用fail2ban防止暴力破解,定期检查PHP错误日志(/var/log/php_errors.log)和Web服务器日志:
    sudo yum install fail2ban -y
    sudo systemctl enable fail2ban
    sudo systemctl start fail2ban
    

通过以上步骤,可显著提升CentOS上PHP应用的安全性。需定期更新系统和配置,应对新的安全威胁。

0