温馨提示×

centos如何解决php安全问题

小樊
35
2025-11-29 16:50:02
栏目: 编程语言

CentOS 上提升 PHP 安全性的可执行清单

一 系统与网络基线

  • 保持系统与软件包为最新,及时修补漏洞:执行命令:sudo yum update
  • 仅开放必要端口,使用 Firewalld 精细化管理:
    • 启动并持久化:sudo yum install firewalld && sudo systemctl start firewalld && sudo systemctl enable firewalld
    • 放行 HTTP/HTTPS
      • 按端口:sudo firewall-cmd --zone=public --add-port=80/tcp --permanent && sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
      • 或按服务:sudo firewall-cmd --permanent --zone=public --add-service=http && sudo firewall-cmd --permanent --zone=public --add-service=https
    • 重载规则:sudo firewall-cmd --reload
  • 启用 SELinux 强制模式,提供进程与文件的强制访问控制:
    • 临时生效:sudo setenforce 1
    • 永久生效:编辑 /etc/selinux/config,设置 SELINUX=enforcing
  • 加固 SSH:禁用 root 直接登录,优先使用密钥认证(编辑 /etc/ssh/sshd_configPermitRootLogin no),并重启 sshd
  • 部署 Fail2Ban 监控暴力登录并自动封禁,降低爆破风险。

二 PHP 运行时安全配置

  • 编辑 php.ini(路径因 SAPI 与发行版可能不同,如 /etc/php.ini/etc/php.d/*.ini):
    • 关闭错误显示,开启日志记录:
      • display_errors = Off
      • log_errors = On
      • error_log = /var/log/php_errors.log(确保目录与文件可被 Web 服务运行用户写入)
    • 限制文件与命令执行面:
      • 禁用危险函数(按应用最小化放开):
        • disable_functions = exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec,dl,ini_alter,ini_restore,syslog,readlink,symlink,stream_socket_server,fsockopen,phpinfo
      • 目录访问隔离:open_basedir = /var/www/html:/tmp(按实际站点根目录调整)
    • 上传与会话安全:
      • 限制上传:upload_max_filesize = 2Mpost_max_size = 8M(按业务适度调整)
      • 会话防护:session.cookie_httponly = Onsession.cookie_secure = On(启用 HTTPS 时)、session.use_strict_mode = 1
    • 资源与执行控制:
      • 限制脚本执行时间:max_execution_time = 30
      • 限制内存:memory_limit = 128M
      • 限制 POST 大小:post_max_size(与上传限制匹配)
      • 关闭远程包含:allow_url_fopen = Offallow_url_include = Off
  • 若使用 PHP-FPM(常见于 Nginx 或高并发场景):
    • 进程与监听权限最小化(示例):/etc/php-fpm.d/www.conf 中设置
      • user = apachegroup = apache
      • listen.owner = apachelisten.group = apache
    • 按虚拟主机或目录设置 open_basedirphp_admin_value,实现更细粒度隔离。

三 Web 服务器与加密通信

  • 启用 HTTPS/TLS
    • 安装模块:sudo yum install mod_ssl
    • 配置证书与密钥(如 /etc/httpd/conf.d/ssl.conf 中设置 SSLCertificateFileSSLCertificateKeyFile
    • 重启服务:sudo systemctl restart httpd
  • 使用强加密套件与协议(禁用 SSLv3/TLS1.0/1.1,优先 TLS1.2/1.3),并开启 HSTS(如 Header always set Strict-Transport-Security “max-age=63072000; includeSubDomains; preload”)。
  • 静态资源与上传目录禁止脚本执行(如 Nginx 配置:对 /uploads//static/ 设置 location ~ .php$ { deny all; })。

四 应用与数据库安全

  • 输入校验与输出编码:对所有用户输入进行校验与清理,输出到页面时进行 HTML 实体编码,降低 XSS 风险。
  • 杜绝 SQL 注入:使用 参数化查询/预处理语句(如 PDO 预处理、MySQLi 预处理),避免拼接 SQL。
  • 数据库账户最小权限:为应用创建专用低权限数据库账户,避免使用 root;按库/表授予所需权限。
  • 文件上传安全:仅允许白名单扩展名与 MIME 类型,限制大小,存储在Web 根目录之外,重命名上传文件,必要时对图片做二次校验(如 getimagesize),并在下载时设置下载而非执行

五 运维监控与备份

  • 日志与审计:
    • 确保 error_log 正常写入并定期审计;使用 logrotate 管理日志轮转与保留,避免日志过大与信息泄露。
    • 启用系统日志与审计(如 rsyslog/auditd)收集关键事件。
  • 入侵防护:部署 Fail2Ban 监控 HTTP/SSH 等日志,自动封禁恶意 IP。
  • 备份与恢复:定期备份站点代码与数据库,并进行离线/异地保存与恢复演练;示例:
    • 文件:rsync -avz --delete /var/www/html/ /backup/website_backup/
    • 数据库:mysqldump -u[用户] -p[密码] [库名] | gzip > /backup/website_backup.sql.gz
  • 持续更新与复查:保持 PHP、Web 服务器、框架与依赖库为最新版本,定期复核安全配置基线。

0