Rumah >rangka kerja php >Laravel >Bagaimana untuk melaksanakan pembatas kadar dan pendikit API dalam aplikasi Laravel?
Pengaturan kadar dan pendikit API adalah penting untuk melindungi aplikasi Laravel anda daripada penyalahgunaan dan memastikan kestabilan dan prestasi perkhidmatan anda. Laravel menyediakan mekanisme terbina dalam untuk melaksanakan langkah-langkah keselamatan ini dengan mudah. Alat utama ialah middleware throttle
. Pemeriksaan middleware ini terhadap cache (biasanya dikonfigurasikan untuk menggunakan REDIS atau pangkalan data) untuk menjejaki bilangan permintaan yang dibuat dari alamat IP yang diberikan dalam tetingkap masa yang ditentukan. Jika had melebihi, middleware mengembalikan 429 terlalu banyak permintaan respons HTTP.
Untuk melaksanakan kadar yang mengehadkan, anda biasanya akan menambah middleware throttle
ke laluan API anda. Sebagai contoh, dalam fail routes/api.php
anda:
<code class="php">Route::middleware('auth:sanctum', 'throttle:60,1')->group(function () { Route::get('/users', [UserController::class, 'index']); Route::post('/users', [UserController::class, 'store']); });</code>
Kod ini mengehadkan permintaan kepada 60 permintaan seminit (60 permintaan, 1 minit). auth:sanctum
Middleware memastikan hanya pengguna yang disahkan dapat mengakses laluan ini, meningkatkan keselamatan. Parameter middleware throttle
fleksibel; Anda boleh menyesuaikan bilangan permintaan dan tetingkap masa yang sesuai dengan keperluan aplikasi anda. Ingatlah untuk mengkonfigurasi sistem caching anda dengan sewajarnya. Redis sangat disyorkan untuk prestasi, terutamanya di bawah beban tinggi.
Walaupun middleware throttle
adalah titik permulaan yang hebat, beberapa amalan terbaik dapat meningkatkan keselamatan API anda:
Respons lalai Laravel 429 menyediakan maklumat asas. Anda boleh menyesuaikan ini untuk memberikan lebih banyak mesej ralat mesra pengguna dan bermaklumat. Anda boleh mencapai ini menggunakan pengendalian pengecualian dan respons tersuai.
Sebagai contoh, buat pengendali pengecualian tersuai:
<code class="php"><?php namespace App\Exceptions; use Illuminate\Http\JsonResponse; use Illuminate\Validation\ValidationException; use Illuminate\Auth\AuthenticationException; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Symfony\Component\HttpKernel\Exception\HttpException; use Throwable; use Illuminate\Http\Response; use Symfony\Component\HttpFoundation\Response as SymfonyResponse; class Handler extends ExceptionHandler { public function render($request, Throwable $exception) { if ($exception instanceof HttpException && $exception->getStatusCode() === SymfonyResponse::HTTP_TOO_MANY_REQUESTS) { return response()->json([ 'error' => 'Too Many Requests', 'message' => 'Rate limit exceeded. Please try again later.', 'retry_after' => $exception->getHeaders()['Retry-After'] ?? 60, //Seconds ], SymfonyResponse::HTTP_TOO_MANY_REQUESTS); } return parent::render($request, $exception); } }</code>
Kod ini memintas tindak balas 429 dan mengembalikan respons JSON adat dengan maklumat yang lebih banyak deskriptif, termasuk medan retry_after
yang menunjukkan apabila pengguna dapat mencuba semula. Anda boleh menyesuaikannya lagi untuk memasukkan lebih banyak maklumat khusus konteks berdasarkan jenis yang mengehadkan kadar yang digunakan.
Middleware throttle
Laravel terutamanya menawarkan pengehadangan kadar berasaskan alamat IP-alamat. Walau bagaimanapun, anda boleh mencapai strategi yang lebih canggih melalui manipulasi utama logik dan cache.
Memilih strategi terbaik bergantung kepada keperluan khusus dan keperluan keselamatan aplikasi anda. Untuk API yang mudah, mengehadkan berasaskan IP mungkin cukup. Untuk aplikasi yang lebih kompleks dengan Pengesahan Pengguna, gabungan pengehadangan berasaskan IP dan berasaskan pengguna menawarkan perlindungan yang lebih kuat. Sentiasa mengutamakan kawalan berbutir dan semakan tetap untuk menyesuaikan diri dengan perubahan corak penggunaan dan ancaman yang berpotensi.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pembatas kadar dan pendikit API dalam aplikasi Laravel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!