laravel-security
Laravel におけるセキュリティのベストプラクティスを網羅するスキルで、認証・認可、バリデーション、CSRF 対策、マスアサインメント、ファイルアップロード、シークレット管理、レート制限、セキュアなデプロイまでをカバーします。セキュリティ上のリスクを含む実装や設定を行う際に自動的に適用され、脆弱性を未然に防ぐための指針を提供します。
description の原文を見る
Laravel security best practices for authn/authz, validation, CSRF, mass assignment, file uploads, secrets, rate limiting, and secure deployment.
SKILL.md 本文
Laravel セキュリティのベストプラクティス
Laravel アプリケーションを一般的なセキュリティ脆弱性から保護するための包括的なセキュリティガイド。
いつ有効にするか
- 認証または認可を追加する場合
- ユーザー入力とファイルアップロードを処理する場合
- 新しい API エンドポイントを作成する場合
- シークレット情報と環境設定を管理する場合
- 本番環境へのデプロイメントを堅牢化する場合
仕組み
- Middleware が基本的な保護を提供します(CSRF の場合は
VerifyCsrfToken、セキュリティヘッダーの場合はSecurityHeaders)。 - Guard と policy がアクセス制御を強制します(
auth:sanctum、$this->authorize、policy middleware)。 - Form Request がサービスに到達する前に入力を検証し、形成します(
UploadInvoiceRequest)。 - Rate limiting が認証制御とともに不正使用からの保護を追加します(
RateLimiter::for('login'))。 - データセキュリティは暗号化されたキャスト、mass-assignment 保護、および署名付きルートから得られます(
URL::temporarySignedRoute+signedmiddleware)。
基本的なセキュリティ設定
- 本番環境では
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'])]);
認可:Policy と Gate
- モデルレベルの認可には policy を使用します
- Controller とサービスで認可を強制します
$this->authorize('update', $project);
ルートレベルの強制には policy middleware を使用します:
use Illuminate\Support\Facades\Route;
Route::put('/projects/{project}', [ProjectController::class, 'update'])
->middleware(['auth:sanctum', 'can:update,project']);
Validation とデータサニタイズ
- 常に Form Request で入力を検証します
- 厳密な validation ルールと型チェックを使用します
- 派生フィールドについてはリクエストペイロードに依存しません
Mass Assignment 保護
$fillableまたは$guardedを使用し、Model::unguard()の使用を避けます- DTO または明示的な属性マッピングを優先します
SQL インジェクション防止
- Eloquent または query builder のパラメータバインディングを使用します
- 厳密に必要な場合を除き、生の SQL を避けます
DB::select('select * from users where email = ?', [$email]);
XSS 防止
- Blade はデフォルトで出力をエスケープします(
{{ }}) {!! !!}は信頼できるサニタイズ済み HTML のみに使用します- リッチテキストは専用ライブラリでサニタイズします
CSRF 保護
VerifyCsrfTokenmiddleware を有効に保ちます- フォームに
@csrfを追加し、SPA リクエスト向けに XSRF トークンを送信します
Sanctum で SPA 認証を行う場合は、ステートフルリクエストが設定されていることを確認します:
// config/sanctum.php
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', 'localhost')),
ファイルアップロードセキュリティ
- ファイルサイズ、MIME タイプ、および拡張子を検証します
- 可能な限りアップロードを public パス外に保存します
- 必要に応じてファイルをマルウェアスキャンします
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') // これを public 以外のディスクに設定します
);
Rate Limiting
- 認証および書き込みエンドポイントに
throttlemiddleware を適用します - ログイン、パスワードリセット、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', // すべてのサブドメインが HTTPS の場合は includeSubDomains/preload を追加します
'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');
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- affaan-m
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/affaan-m/everything-claude-code / ライセンス: MIT
関連スキル
secure-code-guardian
認証・認可の実装、ユーザー入力の保護、OWASP Top 10の脆弱性対策が必要な場合に使用します。bcrypt/argon2によるパスワードハッシング、パラメータ化ステートメントによるSQLインジェクション対策、CORS/CSPヘッダーの設定、Zodによる入力検証、JWTトークンの構築などのカスタムセキュリティ実装に対応します。認証、認可、入力検証、暗号化、OWASP Top 10対策、セッション管理、セキュリティ強化全般で活用できます。ただし、構築済みのOAuth/SSO統合や単独のセキュリティ監査が必要な場合は、より特化したスキルの検討をお勧めします。
claude-authenticity
APIエンドポイントが本物のClaudeによって支えられているか(ラッパーやプロキシ、偽装ではないか)を、claude-verifyプロジェクトを模した9つの重み付きルールベースチェックで検証できます。また、Claudeの正体を上書きしているプロバイダーから注入されたシステムプロンプトも抽出します。完全に自己完結しており、httpx以外の追加パッケージは不要です。Claude APIキーまたはエンドポイントを検証したい場合、サードパーティのClaudeサービスが本物か確認したい場合、APIプロバイダーのClaude正当性を監査したい場合、複数モデルを並行してテストしたい場合、またはプロバイダーが注入したシステムプロンプトを特定したい場合に使用できます。
anth-security-basics
Anthropic Claude APIのセキュリティベストプラクティスを適用し、キー管理、入力値の検証、プロンプトインジェクション対策を実施します。APIキーの保護、Claudeに送信する前のユーザー入力検証、コンテンツセーフティガードレールの実装が必要な場合に活用できます。「anthropic security」「claude api key security」「secure anthropic」「prompt injection defense」といったフレーズでトリガーされます。
x-ray
x-ray.mdプレ監査レポートを生成します。概要、強化された脅威モデル(プロトコルタイプのプロファイリング、Gitの重み付け攻撃面分析、時間軸リスク分析、コンポーザビリティ依存関係マッピング)、不変条件、統合、ドキュメント品質、テスト分析、開発者・Gitの履歴をカバーしています。「x-ray」「audit readiness」「readiness report」「pre-audit report」「prep this protocol」「protocol prep」「summarize this protocol」のキーワードで実行されます。
semgrep
Semgrepスタティック分析スキャンを実行し、カスタム検出ルールを作成します。Semgrepでのコードスキャン、セキュリティ脆弱性の検出、カスタムYAMLルールの作成、または特定のバグパターンの検出が必要な場合に使用します。重要:ユーザーが「バグをスキャンしたい」「コード品質を確認したい」「脆弱性を見つけたい」「スタティック分析」「セキュリティlint」「コード監査」または「コーディング標準を適用したい」と尋ねた場合も、Semgrepという名称を明記していなくても、このスキルを使用してください。Semgrepは30以上の言語に対応したパターンベースのコードスキャンに最適なツールです。
ghost-bits-cast-attack
Java「ゴーストビッツ」/キャストアタック プレイブック(Black Hat Asia 2026)。16ビット文字が8ビットバイトに暗黙的に縮小されるJavaサービスへの攻撃時に使用します。WAF/IDSを回避して、SQLインジェクション、デシリアライゼーション型RCE、ファイルアップロード(Webシェル)、パストトラバーサル、CRLF インジェクション、リクエストスマグリング、SMTPインジェクションを実行できます。Tomcat、Spring、Jetty、Undertow、Vert.x、Jackson、Fastjson、Apache Commons BCEL、Apache HttpClient、Angus Mail、JDK HttpServer、Lettuce、Jodd、XMLWriterに影響し、WAFバイパスにより多くの「パッチ済み」CVEを再度有効化します。