Laravel Security

affaan-m/ECC/docs/tr/skills/laravel-security

作者 affaan-mef648e01899ba3e8dc6371642deaaf64b4477775無授權條款275K 個星標收錄於 2026年10月9日更新於 2026年10月9日儲存庫4 天前更新

Laravel security best practices for authn/authz, validation, CSRF, mass assignment, file uploads, secrets, rate limiting, and secure deployment.

僅含說明Security
AI 產生的概覽

Laravel 安全性最佳實務指南,涵蓋身分驗證、授權、驗證、CSRF、檔案上傳、密鑰與強化設定。

功能
此技能是一份僅含說明的參考文件,說明 Laravel 安全性實務:身分驗證與權杖處理、原則與 Gate、輸入驗證、大量指派、SQL 注入、XSS、CSRF、檔案上傳、速率限制、密鑰管理、加密屬性、安全標頭、CORS、記錄與個人資料、相依性稽核以及簽章 URL。它針對每個主題提供設定建議與 PHP 程式碼片段,而非產生檔案或執行工具。它產出的是可供代理在撰寫或審查 Laravel 程式碼時採用的指導性建議。
適用情境
適用於為 Laravel 應用程式加入身分驗證或授權、處理使用者輸入或檔案上傳、建立新的 API 端點、管理密鑰與環境設定,或強化正式環境部署的情境。它針對 Laravel 專屬的安全性工作,而非一般 PHP 或與框架無關的審查。
執行需求
此技能不附帶任何指令碼或資源,僅為說明文件。套用其建議需要具備 Composer 與 PHP 的 Laravel 專案,部分建議涉及 Sanctum 或 Passport 等選用套件。

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ı:

php
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
php
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
php
$this->authorize('update', $project);

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

php
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
php
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:

php
// 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
php
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'],        ];    }}
php
$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
php
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.

php
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:

php
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
php
// config/cors.phpreturn [    '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
php
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.

php
use Illuminate\Support\Facades\URL;
$url = URL::temporarySignedRoute(    'downloads.invoice',    now()->addMinutes(15),    ['invoice' => $invoice->id]);
php
use Illuminate\Support\Facades\Route;
Route::get('/invoices/{invoice}/download', [InvoiceController::class, 'download'])    ->name('downloads.invoice')    ->middleware('signed');

來源與署名

來源:affaan-m/ECC位於docs/tr/skills/laravel-security提交ef648e0

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架