Rumah >rangka kerja php >Laravel >Bagaimana untuk melaksanakan pembatas kadar dan pendikit API dalam aplikasi Laravel?

Bagaimana untuk melaksanakan pembatas kadar dan pendikit API dalam aplikasi Laravel?

Johnathan Smith
Johnathan Smithasal
2025-03-12 17:54:16562semak imbas

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.

Amalan terbaik untuk mendapatkan API Laravel menggunakan kadar yang mengehadkan

Walaupun middleware throttle adalah titik permulaan yang hebat, beberapa amalan terbaik dapat meningkatkan keselamatan API anda:

  • Kawalan Granular: Jangan memohon had kadar tunggal untuk keseluruhan API anda. Melaksanakan had yang berbeza untuk titik akhir yang berbeza berdasarkan intensiti sumber dan kepekaan mereka. Sebagai contoh, titik akhir intensif sumber mungkin mempunyai had yang lebih rendah daripada yang kurang menuntut.
  • Throttling berasaskan pengguna: Daripada hanya pendikit berasaskan IP, pertimbangkan pendikit berasaskan pengguna. Ini membatasi permintaan berdasarkan pengguna yang disahkan, membolehkan lebih banyak fleksibiliti dan rawatan yang lebih adil bagi pengguna yang sah. Anda boleh mencapai ini dengan menambahkan pengecam khusus pengguna ke kunci pendikit.
  • Menggabungkan dengan langkah -langkah keselamatan yang lain: Pengaturan kadar harus menjadi sebahagian daripada strategi keselamatan berlapis. Menggabungkannya dengan pengesahan input, pengesahan (contohnya, menggunakan Sanctum, Pasport, atau penyedia pengesahan lain), kebenaran, dan sanitisasi output.
  • Pemantauan dan Makluman: Pantau statistik yang mengehadkan kadar anda untuk mengenal pasti corak penyalahgunaan atau kesesakan yang berpotensi. Sediakan makluman untuk memberitahu anda apabila had kadar sering dicapai, membolehkan anda menangani masalah yang berpotensi secara proaktif.
  • Tinjauan dan Pelarasan Biasa: Secara kerap mengkaji semula konfigurasi mengehadkan kadar anda. Apabila aplikasi anda berkembang dan corak penggunaan berubah, anda mungkin perlu menyesuaikan had anda untuk mengekalkan prestasi dan keselamatan yang optimum.

Menyesuaikan Respons Ralat untuk Permintaan Teratas Kadar di Laravel

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.

Strategi mengehadkan kadar yang berbeza di Laravel dan memilih yang betul

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.

  • Berasaskan IP: Pendekatan paling mudah, mengehadkan permintaan berdasarkan alamat IP pelanggan. Sesuai untuk perlindungan umum terhadap serangan asas tetapi boleh dilangkau dengan proksi atau alamat IP yang dikongsi.
  • Berasaskan Pengguna: Had permintaan berdasarkan pengguna yang disahkan. Ini menawarkan pendekatan yang lebih bernuansa, membolehkan lebih banyak permintaan daripada pengguna yang sah semasa masih melindungi daripada penyalahgunaan. Ini memerlukan pengesahan pengguna.
  • Khusus Endpoint: Had kadar yang berbeza untuk titik akhir API yang berbeza. Ini membolehkan perlindungan jahitan berdasarkan intensiti sumber dan kepekaan setiap titik akhir.
  • Strategi Gabungan: Anda boleh menggabungkan strategi ini. Sebagai contoh, anda mungkin mempunyai had berasaskan IP untuk permintaan yang tidak disahkan dan had berasaskan pengguna yang lebih murah untuk pengguna yang disahkan. Anda boleh mencapai ini dengan membuat kunci cache tersuai yang menggabungkan kedua -dua alamat IP dan ID pengguna.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn