Hạn chế tỉ lệ truy cập (Rate Limiting)
Rate Limiting là một phương pháp được sử dụng để kiểm soát số lần yêu cầu một máy khách có
thể thực hiện tới một web server bên trong một khung thời gian nhất định. Nó được sử dụng phổ
biến để bảo vệ các ứng dụng web khỏi các cuộc tấn công tiềm tàng và duy trì chất lượng dịch vụ
cho tất cả người dùng.
Laravel cung cấp các dịch vụ rate limiting phù hợp hoá theo yêu cầu và mạnh mẽ ra khỏi khung. Nó
cho phép bạn hạn chế số lần yêu cầu dựa trên các tiêu chuẩn khác nhau, như địa chỉ IP, người dùng
xác thực hay các thuộc tính route cụ thể.
Sau đây là một vài đặc tính rate limiting then chốt có sẵn trong Laravel:
Hạn chế tỉ lệ truy cập toàn cục (Global Rate Limiting)
Laravel cho phép bạn định nghĩa một rate limit toàn cục cái áp dụng cho tất cả các routes trong ứng dụng
của bạn. Cái này có thể được thực hiện sử dụng throttle middleware và định nghĩa số yêu cầu tối đa và khoảng
thời gian trong kernel ứng dụng của bạn:
protected $middlewareGroups = [
‘web’ => [
// …
\Illuminate\Routing\Middleware\ThrottleRequests::class:
60 , 1 ,
],
‘api’ => [
// …
\Illuminate\Routing\Middleware\ThrottleRequests::class:
60 , 1 ,
],
];
Hạn chế tỉ lệ truy cập tuỳ theo route (Route Specific Rate Limiting)
Bạn có thể áp dụng rate limits tới các routes cụ thể sử dụng throttle middlewware trực tiếp trên các routes:
Route::middleware( ‘throttle:60,1’ )->group(
function () {
Route::get( ‘/user’ , function () {
//
});
});
Rate Limiting động (Danymic Rate Limiting)
Laravel cũng hỗ trợ rate limiting động dựa trên các thuộc tính của những người dùng xác thực. Cái này đặc
biệt hữu dụng khi các dạng người dùng khác nhau có các tỉ lệ hạn chế truy cập khác nhau.
Route::middleware( ‘throttle:rate_limit,1’ )-
>group( function () {
Route::get( ‘/user’ , function () {
//
});
});
Trong ví dụ này, rate limit nên là một thuộc tính của model User xác thực cái quyết định số yêu cầu tối đa người
dùng có thể thực hiện.
Phù hợp hoá theo yêu cầu các trả lời rate limited
Bạn có thể phù hợp hoá theo yêu cầu trả lời được trả về tới máy khách khi chúng chạm tởi rate limit bằng cách gọi
phương thức limit trên RateLimiter facade trong RouteServiceProvider của bạn:
use Illuminate \ Cache \ RateLimiting \ Limit ;
use Illuminate \ Support \ Facades \ RateLimiter ;
RateLimiter::for( ‘global’ , function (Request
$request) {
return Limit::perMinute( 1000 )->response(
function () {
return response( ‘Custom Rate Limit
Exceeded’ , 429 );
});
});
Trong ví dụ này, máy khách bị hạn chế tỉ lệ truy cập sẽ nhận một trả lời với một code trạng thái 429 và thông
điệp ‘Custom Rate Limit Exceeded’
Nhớ import các classes phù hợp tại đỉnh của file của bạn khi sử dụng các đặc tính này:
use Illuminate \ Http \ Request ;
use Illuminate \ Support \ Facades \ Route ;
Sử dụng các đặc tính này, bạn có thể tạo một hệ thống rate limiting an toàn và mạnh mẽ cho ứng dụng Laravel của
bạn.