SecLab
The risk map and an AppSec mindsetconceptĐộ khó 2/518 phút

Xác thực và phân quyền: hai câu hỏi khác nhau

Mục tiêu: Sau bài này bạn chỉ ra được, trong một endpoint bất kỳ, chỗ nào trả lời "bạn là ai" và chỗ nào trả lời "bạn được làm gì".

V8API1:2023A01:2025access-control
Bước 1 / 4 · read5 phút

Hai câu hỏi, hai chỗ trả lời

Xác thực (authentication) trả lời bạn là ai. Đầu vào là một bằng chứng — mật khẩu, passkey, token — và đầu ra là một danh tính. Nó xảy ra một lần cho mỗi request, ở middleware, và nó không biết gì về dữ liệu request đang chạm tới.

Phân quyền (authorisation) trả lời bạn được làm gì. Đầu vào là một danh tính cộng với một đối tượng cụ thể, và đầu ra là cho phép hoặc từ chối. Nó xảy ra mỗi lần chạm tới một đối tượng, ở tầng nghiệp vụ hoặc tầng truy vấn.

Điểm quan trọng nhất và cũng là chỗ hay nhầm nhất: middleware không thể trả lời câu hỏi thứ hai. [Authorize] biết Bob là Bob. Nó không biết 1042 là gì, không biết 1042 có phải của Bob, và không có chỗ nào cho nó biết — thông tin đó nằm trong cơ sở dữ liệu. Đó là lý do một endpoint có thể có [Authorize] đầy đủ và vẫn cho đọc dữ liệu người khác.

Có một câu hỏi thứ ba mà đôi khi được gọi lẫn là phân quyền: bạn có vai gì. [Authorize(Roles = "Admin")] trả lời câu này, và nó phân quyền — nhưng chỉ ở mức hàm (API5, "được gọi endpoint này không"), không phải mức đối tượng (API1, "được đọc bản ghi này không"). Hai mức, hai bản vá khác nhau, và một hệ thống cần cả hai.

Câu hỏiTênVị trí trong codeSai thì gọi là
Bạn là ai?AuthenticationMiddleware, một lần mỗi requestA07 Authentication Failures
Bạn được gọi hàm này không?Function-level authzAttribute hoặc policy trên actionAPI5 / BFLA
Bạn được chạm đối tượng này không?Object-level authzTrong truy vấn, mỗi lần truy cậpAPI1 / BOLA / IDOR
Xem lộ trình

Bình luận

Tham gia thảo luận
Đăng ký để bình luận

Bình luận cần tài khoản đã hoàn thành ít nhất một bài học. Điều kiện đó là thứ giữ cho luồng thảo luận này còn đáng đọc: mỗi ý kiến gắn với một người có thể bị hỏi lại, và reputation tích luỹ theo thời gian.

Đăng kýĐăng nhập

Bạn vẫn đọc được toàn bộ bình luận dưới đây mà không cần tài khoản. Đăng nhập xong bạn sẽ quay lại đúng chỗ này, không phải đầu trang.

Đang tải bình luận…