本文へ移動
cccskills
無料GitHub で公開

laravel-security

Laravelセキュリティベストプラクティス — 認証/認可、バリデーション、CSRF、マスアサインメント、ファイルアップロード、シークレット、レート制限、セキュアなデプロイメント。

インストール方法を見る

含まれるファイル(1)

  • SKILL.md8.6 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Laravelセキュリティベストプラクティス

一般的な脆弱性から保護するためのLaravelアプリケーション向け包括的なセキュリティガイダンス。

アクティベーション条件

  • 認証または認可の追加
  • ユーザー入力とファイルアップロードの処理
  • 新しいAPIエンドポイントの構築
  • シークレットと環境設定の管理
  • 本番デプロイメントの強化

仕組み

  • ミドルウェアがベースライン保護を提供(VerifyCsrfTokenによるCSRF、SecurityHeadersによるセキュリティヘッダー)。
  • ガードとポリシーがアクセスコントロールを適用(auth:sanctum、$this->authorize、ポリシーミドルウェア)。
  • フォームリクエストがサービスに到達する前に入力を検証・整形(UploadInvoiceRequest)。
  • レート制限が認証コントロールと併せて不正利用保護を追加(RateLimiter::for('login'))。
  • データの安全性は暗号化キャスト、マスアサインメントガード、署名付きURL(URL::temporarySignedRoute + signedミドルウェア)から。

コアセキュリティ設定

  • 本番ではAPP_DEBUG=false
  • APP_KEYは必ず設定し、漏洩時にはローテート
  • SESSION_SECURE_COOKIE=trueとSESSION_SAME_SITE=lax(機密アプリではstrict)を設定
  • 正しいHTTPS検出のためにトラステッドプロキシを設定

セッションとCookieの強化

  • JavaScriptアクセスを防止するためにSESSION_HTTP_ONLY=trueを設定
  • 高リスクフローにはSESSION_SAME_SITE=strictを使用
  • ログインと権限変更時にセッションを再生成

認証とトークン

  • API認証にはLaravel SanctumまたはPassportを使用
  • 機密データには短寿命トークンとリフレッシュフローを優先
  • ログアウトと漏洩アカウントでトークンを取り消し

ルート保護の例:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Route::middleware('auth:sanctum')->get('/me', function (Request $request) {
    return $request->user();
});

パスワードセキュリティ

  • Hash::make()でパスワードをハッシュし、平文を保存しない
  • リセットフローにはLaravelのパスワードブローカーを使用
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules\Password;

$validated = $request->validate([
    'password' => ['required', 'string', Password::min(12)->letters()->mixedCase()->numbers()->symbols()],
]);

$user->update(['password' => Hash::make($validated['password'])]);

認可: ポリシーとゲート

  • モデルレベルの認可にはポリシーを使用
  • コントローラーとサービスで認可を適用
$this->authorize('update', $project);

ルートレベルの適用にはポリシーミドルウェアを使用:

use Illuminate\Support\Facades\Route;

Route::put('/projects/{project}', [ProjectController::class, 'update'])
    ->middleware(['auth:sanctum', 'can:update,project']);

バリデーションとデータサニタイズ

  • 常にフォームリクエストで入力を検証
  • 厳密なバリデーションルールと型チェックを使用
  • 派生フィールドにリクエストペイロードを信頼しない

マスアサインメント保護

  • $fillableまたは$guardedを使用し、Model::unguard()を避ける
  • DTOまたは明示的な属性マッピングを優先

SQLインジェクション防止

  • Eloquentまたはクエリビルダーのパラメータバインディングを使用
  • 厳密に必要でない限り生SQLを避ける
DB::select('select * from users where email = ?', [$email]);

XSS防止

  • Bladeはデフォルトで出力をエスケープ({{ }})
  • {!! !!}は信頼でき、サニタイズ済みのHTMLにのみ使用
  • リッチテキストは専用ライブラリでサニタイズ

CSRF保護

  • VerifyCsrfTokenミドルウェアを有効に保つ
  • フォームには@csrfを含め、SPAリクエストにはXSRFトークンを送信

SanctumによるSPA認証では、ステートフルリクエストが設定されていることを確認:

// config/sanctum.php
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', 'localhost')),

ファイルアップロードの安全性

  • ファイルサイズ、MIMEタイプ、拡張子を検証
  • 可能な場合はパブリックパスの外部にアップロードを保存
  • 必要に応じてマルウェアスキャン
final class UploadInvoiceRequest extends FormRequest
{
    public function authorize(): bool
    {
        return (bool) $this->user()?->can('upload-invoice');
    }

    public function rules(): array
    {
        return [
            'invoice' => ['required', 'file', 'mimes:pdf', 'max:5120'],
        ];
    }
}
$path = $request->file('invoice')->store(
    'invoices',
    config('filesystems.private_disk', 'local') // set this to a non-public disk
);

レート制限

  • 認証と書き込みエンドポイントにthrottleミドルウェアを適用
  • ログイン、パスワードリセット、OTPにはより厳格な制限を使用
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;

RateLimiter::for('login', function (Request $request) {
    return [
        Limit::perMinute(5)->by($request->ip()),
        Limit::perMinute(5)->by(strtolower((string) $request->input('email'))),
    ];
});

シークレットと認証情報

  • ソース管理にシークレットをコミットしない
  • 環境変数とシークレットマネージャーを使用
  • 漏洩後にキーをローテートし、セッションを無効化

暗号化属性

保存時の機密カラムには暗号化キャストを使用。

protected $casts = [
    'api_token' => 'encrypted',
];

セキュリティヘッダー

  • 適切な場所にCSP、HSTS、フレーム保護を追加
  • HTTPSリダイレクトを適用するためにトラステッドプロキシ設定を使用

ヘッダーを設定するミドルウェアの例:

use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

final class SecurityHeaders
{
    public function handle(Request $request, \Closure $next): Response
    {
        $response = $next($request);

        $response->headers->add([
            'Content-Security-Policy' => "default-src 'self'",
            'Strict-Transport-Security' => 'max-age=31536000', // add includeSubDomains/preload only when all subdomains are HTTPS
            'X-Frame-Options' => 'DENY',
            'X-Content-Type-Options' => 'nosniff',
            'Referrer-Policy' => 'no-referrer',
        ]);

        return $response;
    }
}

CORSとAPIの公開

  • config/cors.phpでオリジンを制限
  • 認証付きルートにはワイルドカードオリジンを避ける
// config/cors.php
return [
    'paths' => ['api/*', 'sanctum/csrf-cookie'],
    'allowed_methods' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'],
    'allowed_origins' => ['https://app.example.com'],
    'allowed_headers' => [
        'Content-Type',
        'Authorization',
        'X-Requested-With',
        'X-XSRF-TOKEN',
        'X-CSRF-TOKEN',
    ],
    'supports_credentials' => true,
];

ロギングとPII

  • パスワード、トークン、完全なカード情報をログに記録しない
  • 構造化ログで機密フィールドをリダクト
use Illuminate\Support\Facades\Log;

Log::info('User updated profile', [
    'user_id' => $user->id,
    'email' => '[REDACTED]',
    'token' => '[REDACTED]',
]);

依存関係のセキュリティ

  • composer auditを定期的に実行
  • 依存関係を注意深くピン留めし、CVE発生時には迅速に更新

署名付きURL

一時的な改ざん防止リンクには署名付きルートを使用。

use Illuminate\Support\Facades\URL;

$url = URL::temporarySignedRoute(
    'downloads.invoice',
    now()->addMinutes(15),
    ['invoice' => $invoice->id]
);
use Illuminate\Support\Facades\Route;

Route::get('/invoices/{invoice}/download', [InvoiceController::class, 'download'])
    ->name('downloads.invoice')
    ->middleware('signed');

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

agent-eval

無料日本語概要

コーディングエージェント(Claude Code、Aider、Codexなど)のカスタムタスクによる直接比較。合格率、コスト、時間、一貫性メトリクスを測定

hage-oyaji/everything-claude-code-jp-local32026年3月29日 更新

agent-harness-construction

無料日本語概要

AIエージェントのアクションスペース、ツール定義、オブザベーションフォーマットを設計・最適化し、タスク完了率を向上させる

hage-oyaji/everything-claude-code-jp-local32026年3月29日 更新

agentic-engineering

無料日本語概要

評価ファーストの実行、分解、コスト考慮型モデルルーティングによるエージェンティックエンジニアとしての運用

hage-oyaji/everything-claude-code-jp-local32026年3月29日 更新

ai-first-engineering

無料日本語概要

AIエージェントが実装出力の大部分を生成するチームのためのエンジニアリング運用モデル

hage-oyaji/everything-claude-code-jp-local32026年3月29日 更新

ai-regression-testing

無料日本語概要

AI支援開発のためのリグレッションテスト戦略。データベース依存なしのサンドボックスモードAPIテスト、自動バグチェックワークフロー、同一モデルがコードの作成とレビューを行う際のAIの盲点を検出するパターン。

hage-oyaji/everything-claude-code-jp-local32026年3月29日 更新

android-clean-architecture

無料日本語概要

AndroidおよびKotlin Multiplatformプロジェクトのためのクリーンアーキテクチャパターン — モジュール構成、依存関係ルール、UseCase、Repository、データレイヤーパターン

hage-oyaji/everything-claude-code-jp-local32026年3月29日 更新

hage-oyaji のスキルをすべて見る

このスキルの問題を報告する