CentOS環境下Laravel應用安全防護綜合措施
禁用root以外的超級用戶,刪除不必要的賬號和組;設置復雜用戶口令(包含大小寫字母、數字、特殊字符,長度≥8位),并定期更新(如每90天更換一次);使用chattr +i
命令鎖定關鍵系統文件(如/etc/passwd
、/etc/shadow
),防止未經授權的修改。
使用firewalld
或iptables
配置防火墻規則,僅開放必要端口(HTTP 80、HTTPS 443、SSH 22),限制對服務器的非必要訪問;啟用SELinux(/etc/selinux/config
中設置SELINUX=enforcing
),增強系統訪問控制;配置SSH密鑰認證,禁用密碼登錄,限制SSH登錄IP范圍(如僅允許運維服務器IP訪問)。
定期更新CentOS操作系統(sudo yum update -y
)及Laravel框架、依賴包(composer update
),修復已知安全漏洞;集成自動化依賴監控工具(如Dependabot、Renovate),實時跟蹤依賴包的安全更新,避免使用存在已知漏洞的組件。
將敏感配置(如數據庫密碼、API密鑰)存儲在.env
文件中,確保該文件未被提交至代碼倉庫(通過.gitignore
排除);運行php artisan key:generate
生成唯一的32位APP_KEY
(用于加密會話、密碼重置令牌等);使用php artisan config:cache
緩存配置,避免每次請求讀取.env
文件。
Laravel默認啟用CSRF中間件(VerifyCsrfToken
),確保所有修改數據的表單(如登錄、注冊、支付)包含@csrf
指令(生成隱藏的CSRF令牌字段);對于AJAX請求,在Blade模板中添加<meta name="csrf-token" content="{{ csrf_token() }}">
,并在請求頭中攜帶X-CSRF-TOKEN
。
使用Laravel的validate
方法或Form Request
類對用戶輸入進行規則約束(如$request->validate(['email' => 'required|email|unique:users', 'password' => 'required|min:8|confirmed'])
);避免直接使用原生SQL查詢(如DB::select("SELECT * FROM users WHERE email = '$email'"
),優先使用Eloquent ORM或查詢構建器的參數化查詢(如User::where('email', $email)->first()
),防止SQL注入。
配置config/session.php
中的安全參數:secure
設為true
(僅通過HTTPS傳輸會話cookie)、http_only
設為true
(防止JavaScript訪問cookie)、same_site
設為strict
(限制跨站請求攜帶cookie);使用Laravel內置的身份驗證系統(php artisan make:auth
),實現密碼哈希存儲(Hash::make($password)
)、密碼重置功能及角色-based訪問控制(RBAC,如@can('edit-post', $post)
)。
在.env
文件中設置APP_URL=https://yourdomain.com
,創建強制HTTPS中間件(檢查$request->secure()
,若為HTTP則重定向至HTTPS),并在Kernel.php
中注冊全局中間件;使用Certbot工具獲取Let’s Encrypt免費SSL證書(sudo certbot --nginx -d yourdomain.com
),自動配置Web服務器強制HTTPS跳轉;確保證書有效期(90天)監控,通過Certbot的自動續期功能(sudo certbot renew --dry-run
)避免證書過期。
通過Nginx配置添加安全響應頭:add_header X-Content-Type-Options "nosniff"
(防MIME類型嗅探)、add_header X-Frame-Options "SAMEORIGIN"
(防點擊劫持)、add_header X-XSS-Protection "1; mode=block"
(啟用水印防XSS)、add_header Content-Security-Policy "default-src 'self'"
(限制資源加載來源);或創建Laravel自定義中間件(php artisan make:middleware AddSecurityHeaders
),在handle
方法中設置上述響應頭。
使用enlightn/security-checker
(composer require --dev enlightn/security-checker
)或Laravel自帶的php artisan security:check
命令,定期掃描項目依賴中的已知安全漏洞;集成自動化漏洞掃描工具(如OWASP ZAP),進行動態應用安全測試(DAST),識別SQL注入、XSS等漏洞。
配置config/logging.php
中的日志級別(info
或error
),存儲路徑為storage/logs/laravel.log
,避免記錄敏感信息(如密碼);使用Log::info('User logged in', ['user_id' => $user->id])
記錄關鍵操作(如登錄、密碼修改),便于追蹤異常行為;定期檢查Web服務器日志(/var/log/nginx/access.log
或/var/log/apache2/access.log
)和Laravel日志,識別異常請求(如大量404錯誤、頻繁登錄失?。?,及時響應潛在攻擊;部署監控工具(如Monit監控進程狀態、New Relic監控應用性能),實時發現異常行為。