Allowed Routes: Khóa Chặt Cánh Cửa Phía Nguồn (Route-based Restriction)
| Allowed Routes
|--------------------------------------------------------------------------
|
| Definition:
| - Key: a route pattern (string or wildcard like /api/*)
| - Value: a list of allowed domain identifiers
|
| Behavior:
| - Routes listed here can ONLY be accessed from the specified domains.
| - Routes not listed here can be accessed freely from any domain.
|
| Example:
| '/api/*' => ['api','app']
| => All routes under /api/* are only accessible from the "api" and "app" domains.
|
| '/api/global-chat/*' => ['intl','app']
| => All routes under /api/global-chat/* are only accessible from the "intl" and "app" domains.
Nếu cấu hình Restricted Domains (nhốt một domain lại, chỉ cho nó đi vào một vài route) đóng vai trò kiểm soát chủ thể, thì cấu hình Allowed Routes lật ngược bài toán lại: Kiểm soát mục tiêu. Nó chỉ định những đường dẫn (route) cực kỳ nhạy cảm và quyết định xem những ai (domain nào) mới được quyền gọi vào đó.
Đây là lớp bảo vệ thứ 3 (và là chốt chặn cuối cùng) trong ma trận Access Controls.
1. Giải phẫu Cơ Chế Hoạt Động (Behavior)
Cơ chế này hoạt động dựa trên nguyên lý Bảo vệ điểm đến (Endpoint Protection). Khác với Restricted Domains áp dụng "Default Allow" (mặc định cho qua), Allowed Routes áp dụng "Default Deny" (mặc định từ chối) cho những route có tên trong danh sách.
-
Key (Khóa): Là đường dẫn (route pattern) mà bạn muốn bảo vệ. Khóa này hỗ trợ ký tự đại diện (wildcard
*). -
Value (Giá trị): Một mảng chứa danh sách các "định danh tên miền" (short identifier) được phép gọi vào route đó.
Nguyên lý vận hành:
-
Một request gửi tới đường dẫn
/api/users/profile. -
Hệ thống dò trong mảng cấu hình xem route
/api/users/profile(hoặc/api/*) có được định nghĩa không. -
Trường hợp A: Route có trong danh sách (Ví dụ:
'/api/*' => ['api', 'app']):-
Hệ thống kiểm tra tiếp: Request này xuất phát từ domain nào?
-
Nếu từ domain
'api'hoặc'app': Cho phép đi vào. -
Nếu từ domain khác (như
'tracking'hay'intl'): Bị chặn ngay lập tức.
-
-
Trường hợp B: Route KHÔNG có trong danh sách (Ví dụ:
/public/assets/*):- Route này được coi là không cần bảo vệ nghiêm ngặt ở cấp độ domain, bất kỳ domain nào cũng được phép gọi.
2. Ứng Dụng Thực Tế: Phân Quyền Theo Module
Trong cấu hình có 2 ví dụ kinh điển cho thấy sự tinh tế của kiến trúc này:
Ví dụ 1: Bảo vệ toàn bộ không gian API lõi
PHP
'/api/*' => ['api','app']
-
Vấn đề: Bất kỳ đường dẫn nào bắt đầu bằng
/api/đều chứa logic xử lý quan trọng (thanh toán, tài khoản, đơn hàng). -
Giải pháp: Chỉ cho phép ứng dụng Web chính (
appdomain) và domain chuyên biệt cho API (apidomain) được gọi vào khu vực này. Nếu ứng dụng Tra cứu (trackingdomain) cố gắng truy cập một API nội bộ (dù do vô tình hay bị khai thác lỗ hổng), request sẽ bị Gateway từ chối ngay ngoài cửa.
Ví dụ 2: Cơ chế "Ngoại lệ" (Override) theo độ ưu tiên
PHP
'/api/global-chat/*' => ['intl','app']
-
Vấn đề: Module chat toàn cầu (
global-chat) tuy nằm trong thư mục/api/, nhưng nó được thiết kế để phục vụ riêng cho nhánh ứng dụng quốc tế (intl). -
Giải pháp: Khi hệ thống đọc cấu hình, pattern
/api/global-chat/*mang tính cụ thể hơn so với pattern tổng/api/*. Nhờ định nghĩa này, domain'intl'được cấp đặc quyền truy cập riêng vào module Chat, nhưng vẫn bị cấm hoàn toàn khỏi các API hệ thống khác.
3. Bản Sonatas Của Hệ Thống Access Control
Khi kết hợp cả 3 khái niệm cấu hình bạn đã đưa ra, chúng tạo thành một "cỗ máy" lọc request hoàn hảo:
-
domains_allow_all_routes(Tướng Quân): Domain nào có tên ở đây thì đi đâu cũng được, bỏ qua mọi vòng kiểm tra. -
Restricted Domains(Kiểm soát Chủ thể): Nếu mày là domain A, mày chỉ được đi vào route X, Y. Nếu ra khỏi đó, mày bị chặn. -
Allowed Routes(Kiểm soát Mục tiêu): Căn phòng/api/*này rất bảo mật, chỉ có domain B và C mới có chìa khóa. Các domain khác không được vào.
Với ma trận 3 lớp này, toàn bộ logic bảo mật phức tạp được gom về một file cấu hình duy nhất. Kỹ sư backend không cần nhét các lệnh if/else rườm rà vào từng Controller nữa, giúp code "sạch" và hệ thống cực kỳ an toàn trước các rủi ro leo thang đặc quyền (Privilege Escalation).
All rights reserved