Laravel セキュリティベストプラクティス
Laravel アプリケーションを一般的な脆弱性から守るための包括的なセキュリティガイダンス。
アクティベートする時機
- 認証または認可を追加する場合
- ユーザー入力とファイルアップロードを処理する場合
- 新しい API エンドポイントを構築する場合
- シークレットと環境設定を管理する場合
- 本番環境デプロイメントを強化する場合
仕組み
- ミドルウェアは基本的な保護を提供(CSRF は
VerifyCsrfToken経由、セキュリティヘッダーはSecurityHeaders経由) - ガードとポリシーがアクセス制御を実施(
auth:sanctum、$this->authorize、ポリシーミドルウェア) - フォームリクエストが入力を検証し形成(
UploadInvoiceRequest)サービスに到達する前に - レート制限が不正使用保護を追加(
RateLimiter::for('login'))認証制御と並行して - データの安全性は暗号化されたキャスト、一括割当ガード、署名付きルート(
URL::temporarySignedRoute+signedミドルウェア)から来ます
コアセキュリティ設定
APP_DEBUG=falseを本番環境で設定APP_KEYをセットして、漏洩時にはローテーション必須SESSION_SECURE_COOKIE=trueとSESSION_SAME_SITE=lax(または機密アプリケーションはstrict)を設定- 正しい HTTPS 検出のため、信頼できるプロキシを設定
セッションとクッキーの強化
SESSION_HTTP_ONLY=trueを設定して JavaScript アクセスを防止- 高リスクフローに対して
SESSION_SAME_SITE=strictを使用 - ログイン時と権限変更時にセッションを再生成
認証とトークン
- Laravel Sanctum または Passport を API 認証に使用
- 機密データの場合、有効期限の短いトークンとリフレッシュフローを優先
- ログアウトと侵害されたアカウントでトークンを無効化
ルート保護例:
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::middleware('auth:sanctum')->get('/me', function (Request $request) {
return $request->us…