Linux服務器上Laravel安全設置指南
mod_rewrite
(支持URL重寫,確保路由正常)和mod_headers
(用于設置安全響應頭)模塊,執行sudo a2enmod rewrite headers
后重啟服務(sudo systemctl restart apache2
);配置虛擬主機時,設置AllowOverride All
以允許.htaccess
文件生效,并限制目錄訪問權限。X-Frame-Options "SAMEORIGIN"
防點擊劫持、X-XSS-Protection "1; mode=block"
啟用水印防XSS、X-Content-Type-Options "nosniff"
防MIME類型嗅探);通過try_files $uri $uri/ /index.php?$query_string
將請求轉發至Laravel的index.php
,并限制對隱藏文件(如.env
)的訪問(location ~ /\.(?!well-known).* { deny all; }
)。display_errors = Off
)以避免泄露敏感信息,保留error_reporting = E_ALL
用于日志記錄;禁用危險函數(如exec
、system
,通過disable_functions
參數),限制文件上傳大?。?code>upload_max_filesize和post_max_size
設置為合理值,如10M)。www-data
),執行sudo chown -R www-data:www-data /var/www/laravel
;設置目錄權限為755(sudo find /var/www/laravel -type d -exec chmod 755 {} \;
)、文件權限為644(sudo find /var/www/laravel -type f -exec chmod 644 {} \;
);特別地,storage
(日志、緩存)和bootstrap/cache
(框架緩存)目錄需設置為775(sudo chmod -R 775 /var/www/laravel/storage /var/www/laravel/bootstrap/cache
),確保Web服務器可寫入。APP_URL
為正式域名(避免使用localhost
),并通過php artisan key:generate
生成唯一的APP_KEY
(用于加密會話、密碼重置令牌等);運行php artisan config:cache
緩存配置,防止.env
文件被直接讀取。@csrf
指令),需確保所有修改數據的表單均包含該令牌;使用Blade模板的自動轉義功能({{ }}
)防止XSS攻擊,若需輸出原始HTML,使用{!! !!}
并自行過濾內容;通過php artisan make:auth
快速實現身份驗證系統,支持密碼哈希(bcrypt
)、記住我功能及密碼重置。Validator
門面或表單請求類)對用戶輸入進行規則約束(如required|string|max:255
),并結合filter_var
函數過濾特殊字符;避免直接使用原生SQL查詢,優先使用查詢構建器或Eloquent ORM(自動防止SQL注入)。sudo apt install certbot python3-certbot-nginx
,然后執行sudo certbot --nginx -d yourdomain.com
),自動配置Nginx/Apache強制HTTPS跳轉;確保證書有效期(90天)監控,可通過Certbot的自動續期功能(sudo certbot renew --dry-run
測試)。firewalld
限制服務器訪問,僅開放HTTP(80端口)、HTTPS(443端口)及SSH(22端口),執行sudo firewall-cmd --permanent --zone=public --add-service={http,https,ssh}
,然后sudo firewall-cmd --reload
;若使用ufw
,可執行sudo ufw allow 'Nginx Full'
并sudo ufw enable
。composer update laravel/framework
)、依賴包(composer update
)及操作系統(sudo apt update && sudo apt upgrade
)為最新版本,及時修復已知安全漏洞;關注Laravel官方安全公告(如GitHub Releases),針對高危漏洞立即升級。storage/logs/laravel.log
)和Web服務器日志(/var/log/nginx/access.log
//var/log/apache2/access.log
),關注頻繁的404錯誤(可能為掃描行為)、500錯誤(可能為攻擊嘗試)及異常POST請求(可能為暴力破解);設置日志輪轉(logrotate
),避免日志文件過大。config/session.php
中,設置secure
為true
(僅通過HTTPS傳輸cookie)、http_only
為true
(防止JavaScript訪問cookie)、same_site
為strict
(防止CSRF攻擊);調整lifetime
(會話過期時間,如120分鐘)和expire_on_close
(瀏覽器關閉時過期)。throttle
限制接口請求頻率(如Route::middleware(['throttle:60,1'])->group(function () { ... });
表示每分鐘最多60次請求),防止暴力破解密碼或DDoS攻擊。