Laravel Security Best Practices is a security claude skill built by Affaan M. Best for: Backend developers building Laravel applications need this to protect against common vulnerabilities and implement enterprise-grade security controls..

What it does
Implement authentication, authorization, CSRF protection, validation, and secure deployment in Laravel applications.
Category
security
Created by
Affaan M
Last updated
Claude Skillsecurity GitHub-backed CuratedintermediateClaude Code

Laravel Security Best Practices

Implement authentication, authorization, CSRF protection, validation, and secure deployment in Laravel applications.

Skill instructions


name: laravel-security description: Laravel security best practices for authn/authz, validation, CSRF, mass assignment, file uploads, secrets, rate limiting, and secure deployment. origin: ECC

Laravel Güvenlik En İyi Uygulamaları

Laravel uygulamalarını yaygın güvenlik açıklarına karşı korumak için kapsamlı güvenlik rehberi.

Ne Zaman Aktif Edilir

  • Kimlik doğrulama veya yetkilendirme ekleme
  • Kullanıcı girişi ve dosya yüklemelerini işleme
  • Yeni API endpoint'leri oluşturma
  • Gizli bilgileri ve ortam ayarlarını yönetme
  • Production deployment'ları sertleştirme

Nasıl Çalışır

  • Middleware temel korumalar sağlar (CSRF için VerifyCsrfToken, güvenlik başlıkları için SecurityHeaders).
  • Guard'lar ve policy'ler erişim kontrolünü zorlar (auth:sanctum, $this->authorize, policy middleware).
  • Form Request'ler servislere ulaşmadan önce girişi doğrular ve şekillendirir (UploadInvoiceRequest).
  • Rate limiting, auth kontrolleri ile birlikte kötüye kullanım koruması ekler (RateLimiter::for('login')).
  • Veri güvenliği encrypted cast'lerden, mass-assignment korumalarından ve signed route'lardan gelir (URL::temporarySignedRoute + signed middleware).

Temel Güvenlik Ayarları

  • Production'da APP_DEBUG=false
  • APP_KEY ayarlanmalı ve tehlikeye girdiğinde döndürülmelidir
  • SESSION_SECURE_COOKIE=true ve SESSION_SAME_SITE=lax ayarlayın (veya hassas uygulamalar için strict)
  • Doğru HTTPS algılama için güvenilir proxy'leri yapılandırın

Session ve Cookie Sertleştirme

  • JavaScript erişimini önlemek için SESSION_HTTP_ONLY=true ayarlayın
  • Yüksek riskli akışlar için SESSION_SAME_SITE=strict kullanın
  • Login ve ayrıcalık değişikliklerinde session'ları yeniden oluşturun

Kimlik Doğrulama ve Token'lar

  • API kimlik doğrulama için Laravel Sanctum veya Passport kullanın
  • Hassas veriler için yenileme akışları ile kısa ömürlü token'ları tercih edin
  • Logout ve tehlikeye girmiş hesaplarda token'ları iptal edin

Örnek route koruması:

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

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

Parola Güvenliği

  • Hash::make() ile parolaları hash'leyin ve asla düz metin saklamayın
  • Sıfırlama akışları için Laravel'in password broker'ını kullanın
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'])]);

Yetkilendirme: Policy'ler ve Gate'ler

  • Model seviyesi yetkilendirme için policy'leri kullanın
  • Controller'larda ve servislerde yetkilendirmeyi zorlayın
$this->authorize('update', $project);

Route seviyesi zorlama için policy middleware kullanın:

use Illuminate\Support\Facades\Route;

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

Validation ve Veri Temizleme

  • Her zaman Form Request'ler ile girişleri doğrulayın
  • Sıkı validation kuralları ve tip kontrolleri kullanın
  • Türetilmiş alanlar için request payload'larına asla güvenmeyin

Mass Assignment Koruması

  • $fillable veya $guarded kullanın ve Model::unguard() kullanmaktan kaçının
  • DTO'ları veya açık attribute mapping'i tercih edin

SQL Injection Önleme

  • Eloquent veya query builder parametre binding kullanın
  • Kesinlikle gerekli olmadıkça raw SQL kullanmaktan kaçının
DB::select('select * from users where email = ?', [$email]);

XSS Önleme

  • Blade varsayılan olarak çıktıyı escape eder ({{ }})
  • {!! !!} sadece güvenilir, temizlenmiş HTML için kullanın
  • Zengin metni özel bir kütüphane ile temizleyin

CSRF Koruması

  • VerifyCsrfToken middleware'ini etkin tutun
  • Formlara @csrf ekleyin ve SPA istekleri için XSRF token'ları gönderin

Sanctum ile SPA kimlik doğrulaması için, stateful isteklerin yapılandırıldığından emin olun:

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

Dosya Yükleme Güvenliği

  • Dosya boyutunu, MIME tipini ve uzantısını doğrulayın
  • Mümkün olduğunda yüklemeleri public path dışında saklayın
  • Gerekirse dosyaları malware için tarayın
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') // bunu public olmayan bir disk'e ayarlayın
);

Rate Limiting

  • Auth ve yazma endpoint'lerinde throttle middleware'i uygulayın
  • Login, password reset ve OTP için daha sıkı limitler kullanın
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'))),
    ];
});

Gizli Bilgiler ve Kimlik Bilgileri

  • Gizli bilgileri asla kaynak kontrolüne commit etmeyin
  • Ortam değişkenlerini ve gizli yöneticileri kullanın
  • Maruz kalma sonrası anahtarları döndürün ve session'ları geçersiz kılın

Şifreli Attribute'lar

Bekleyen hassas sütunlar için encrypted cast'leri kullanın.

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

Güvenlik Başlıkları

  • Uygun yerlerde CSP, HSTS ve frame koruması ekleyin
  • HTTPS yönlendirmelerini zorlamak için güvenilir proxy yapılandırması kullanın

Başlıkları ayarlamak için örnek middleware:

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', // tüm subdomain'ler HTTPS olduğunda includeSubDomains/preload ekleyin
            'X-Frame-Options' => 'DENY',
            'X-Content-Type-Options' => 'nosniff',
            'Referrer-Policy' => 'no-referrer',
        ]);

        return $response;
    }
}

CORS ve API Erişimi

  • config/cors.php'de origin'leri kısıtlayın
  • Kimlik doğrulamalı route'lar için wildcard origin'lerden kaçının
// 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,
];

Loglama ve PII

  • Parolaları, token'ları veya tam kart verilerini asla loglamayın
  • Yapılandırılmış loglarda hassas alanları redakte edin
use Illuminate\Support\Facades\Log;

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

Bağımlılık Güvenliği

  • Düzenli olarak composer audit çalıştırın
  • Bağımlılıkları dikkatle sabitleyin ve CVE'lerde hızlıca güncelleyin

Signed URL'ler

Geçici, kurcalamaya dayanıklı bağlantılar için signed route'ları kullanın.

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');

Use this skill

Most skills are portable instruction packages. Claude Code supports SKILL.md directly. Other agents can use adapted files like AGENTS.md, .cursorrules, and GEMINI.md.

Claude Code

Save SKILL.md into your Claude Skills folder, then restart Claude Code.

mkdir -p ~/.claude/skills/laravel-security-best-practices && curl -L "https://raw.githubusercontent.com/affaan-m/everything-claude-code/HEAD/docs/tr/skills/laravel-security/SKILL.md" -o ~/.claude/skills/laravel-security-best-practices/SKILL.md

Installs to ~/.claude/skills/laravel-security-best-practices/SKILL.md.

Use cases

Backend developers building Laravel applications need this to protect against common vulnerabilities and implement enterprise-grade security controls.

Reviews

No reviews yet. Be the first to review this skill.

No signup required

Stats

Installs0
GitHub Stars174.1k
Forks26970
LicenseMIT
UpdatedMar 27, 2026