1. 系统及PHP基础安全维护
保持CentOS系统和PHP为最新版本,及时安装安全补丁以修复已知漏洞。使用sudo yum update -y命令更新系统及PHP相关包。
2. 防火墙与网络访问控制
通过Firewalld限制对PHP服务的访问,仅开放必要端口(如HTTP 80、HTTPS 443)。示例命令:
sudo yum install firewalld -y
sudo systemctl start firewalld
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
sudo firewall-cmd --reload
此操作可阻断非法IP对PHP应用的探测与攻击。
3. PHP配置文件(php.ini)关键安全设置
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
disable_functions = eval,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
open_basedir约束PHP脚本仅能访问指定目录(如网站根目录),防止遍历系统文件。设置:open_basedir = /var/www/html/:/tmp/
upload_max_filesize = 2M
post_max_size = 8M
file_uploads = On
session.cookie_secure = On # 仅通过HTTPS传输Cookie
session.cookie_httponly = On # 禁止JavaScript访问Cookie
session.cookie_samesite = Strict # 限制Cookie在跨站请求时不被发送
session.gc_maxlifetime = 1440 # 会话有效期(分钟)
expose_php = Off
以上配置需编辑/etc/php.ini文件,修改后重启Web服务(Apache/Nginx)生效。
4. PHP-FPM安全配置(若使用)
若采用PHP-FPM处理PHP请求,需修改其配置文件(/etc/php-fpm.d/www.conf),确保:
user = apache # 或nginx(根据Web服务器用户调整)
group = apache
security.limit_extensions = .php .php3 .php4 .php5 .php7
修改后重启PHP-FPM服务:sudo systemctl restart php-fpm。
5. 安全扩展安装与配置
sudo yum install mod_security -y
sudo systemctl enable mod_security
sudo systemctl start mod_security
php-mcrypt(注意:新版本可能移除)、php-gd、php-mbstring),提升数据处理与加密能力。6. HTTPS加密传输
通过SSL/TLS证书加密网站流量,保护用户敏感信息(如密码、支付信息)。步骤:
sudo yum install mod_ssl openssl -y/etc/httpd/conf.d/ssl.conf,指定证书路径(如SSLCertificateFile /path/to/cert.pem、SSLCertificateKeyFile /path/to/key.pem)sudo systemctl restart httpd7. 输入验证与输出编码
<script>标签)。htmlspecialchars()函数对输出到页面的内容进行转义,防止XSS攻击。示例:echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
此操作可将<转换为<,避免脚本执行。
8. 数据库安全防护
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
$stmt->execute(['username' => $username]);
$user = $stmt->fetch();
SELECT、INSERT),避免使用root用户。9. 日志监控与入侵检测
/var/log/php_errors.log)及Web服务器日志(如Apache的/var/log/httpd/access_log),定期分析异常请求(如大量404错误、POST请求)。sudo yum install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
针对Apache的配置示例(/etc/fail2ban/jail.local):
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/httpd/error_log
maxretry = 3
bantime = 3600
此配置会在3次失败尝试后封禁IP 1小时。
10. 用户与权限管理
adm、lp),修改SSH默认端口(如2222),禁用root远程登录。设置:sudo userdel adm lp sync shutdown halt news uucp operator games gopher ftp
sudo sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config
sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl restart sshd
/etc/login.defs设置密码有效期(如90天)、最小长度(如8位),并通过PAM模块强制密码复杂度(如包含大小写字母、数字、特殊字符)。