1. 系统与PHP基础安全加固
sudo yum update(CentOS)或sudo apt update && sudo apt upgrade(Ubuntu),确保系统和PHP安装最新安全补丁,修复已知漏洞。sudo firewall-cmd --permanent --zone=public --add-service=http --add-service=https && sudo firewall-cmd --reload。2. PHP配置文件安全优化
php.ini中设置display_errors = Off,避免将数据库结构、路径等敏感信息暴露给攻击者;同时启用日志记录log_errors = On,将错误信息写入/var/log/php_errors.log(需确保日志目录权限为root:root,防止未授权读取)。disable_functions指令禁用高危函数,如eval、exec、shell_exec、system、passthru、popen等,防止攻击者执行任意系统命令。file_uploads = On(允许上传),但限制upload_max_filesize(如2M)、post_max_size(如8M),并验证上传文件类型(如仅允许图片、文档),避免上传恶意脚本。openssl.cafile=/etc/pki/tls/certs/ca-bundle.crt,确保PHP与外部服务通信(如数据库、API)时使用SSL/TLS加密,防止数据泄露。expose_php = Off,移除响应头中的X-Powered-By: PHP信息,避免攻击者识别PHP版本及配置。3. 会话与身份认证安全
php.ini中设置session.cookie_secure = 1(仅通过HTTPS传输会话cookie)、session.cookie_httponly = 1(禁止JavaScript访问cookie,防止XSS窃取)、session.cookie_samesite = Strict(防止CSRF攻击);同时设置合理的会话超时时间session.gc_maxlifetime = 3600(1小时),避免会话长期有效。password_hash()函数(如$hashed = password_hash($password, PASSWORD_DEFAULT))存储用户密码,避免明文存储;验证密码时使用password_verify()函数,确保安全性。4. 数据库交互安全
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?"); $stmt->bind_param("i", $id); $stmt->execute();;PDO:$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email"); $stmt->bindParam(':email', $email); $stmt->execute();,避免直接拼接SQL语句。SELECT、INSERT、UPDATE),避免使用root用户连接数据库。例如:CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123'; GRANT SELECT, INSERT ON db_name.* TO 'app_user'@'localhost'; FLUSH PRIVILEGES;。5. 扩展与模块安全管理
php -m查看已安装模块,禁用未使用的模块(如xdebug、soap),减少攻击面。例如Ubuntu下:sudo phpdismod xdebug;CentOS下:sudo yum remove php-xdebug。sudo pecl install suhosin),提供函数过滤、cookie/session加密、上传文件检查等功能;或使用ModSecurity(sudo yum install mod_security),通过规则集拦截常见Web攻击(如SQL注入、XSS)。6. 文件与目录权限控制
/var/www/html)权限设为755(所有者可读/写/执行,组和其他用户可读/执行),文件权限设为644(所有者可读/写,组和其他用户可读);避免使用777权限,防止未授权修改。php.ini中设置open_basedir,限制PHP只能访问指定目录(如/var/www/html/:/tmp/),防止通过file_get_contents()等函数读取系统敏感文件(如/etc/passwd)。7. HTTPS加密与流量保护
sudo apt install certbot python3-certbot-apache && sudo certbot --apache -d yourdomain.com;CentOS+Nginx:sudo yum install certbot python3-certbot-nginx && sudo certbot --nginx -d yourdomain.com,强制HTTPS跳转(如return 301 https://$server_name$request_uri;)。8. 日志监控与定期审计
/var/log/php_errors.log)、Web服务器日志(Apache的/var/log/apache2/error.log、Nginx的/var/log/nginx/error.log)集中存储,使用工具(如ELK Stack、GoAccess)分析异常请求(如大量404错误、SQL注入尝试)。ps aux | grep php)是否有异常PHP进程,及时修复漏洞。