SecLab
Secure Design & Threat ModelingconceptĐộ khó 3/521 phút

Biên giới tin cậy: chỗ duy nhất validation có nghĩa

Mục tiêu: Sau bài này bạn vẽ được biên giới tin cậy của một hệ thống và nói được mỗi biên giới cần kiểm gì.

V15A06:2025Microsoft SDL
Bước 1 / 4 · read7 phút

Một biên giới là chỗ mức tin cậy đổi

Câu hỏi "validate input ở đâu" có một câu trả lời chính xác, và nó không phải "ở mọi nơi": validate ở mỗi biên giới tin cậy, và chỉ ở đó.

Một biên giới tin cậy là chỗ dữ liệu đi từ một vùng bạn kiểm soát ít sang một vùng bạn kiểm soát nhiều — hoặc ngược lại. Nó không phải một tầng trong kiến trúc và cũng không phải một dịch vụ; nó là một chỗ mức tin cậy đổi.

Sáu biên giới của một hệ thống web điển hình, và bốn cái sau thường bị bỏ:

Biên giớiTừ → tớiPhải kiểm gì
Trình duyệt → APIKhông tin → tinXác thực, phân quyền, validate, kích thước
API → cơ sở dữ liệuTin → tinTham số hoá (đây là biên giới interpreter, không phải tin cậy)
API → API bên ngoàiTin → không tinKhông gửi thừa dữ liệu, kiểm đích (SSRF)
API bên ngoài → APIKhông tin → tinValidate response — module 7
Job nền → cơ sở dữ liệuTin → tin, nhưng không qua HTTPNó bỏ qua mọi middleware
Người dùng có quyền → dữ liệu người khácTin → tin, nhưng đổi chủ thểĐây là biên giới của module 2

Hai hàng cuối là hai biên giới quan trọng nhất và ít được vẽ nhất:

Job nền là một biên giới vì nó không đi qua bất kỳ middleware nào. Mọi biện pháp bạn đặt ở pipeline HTTP — xác thực, phân quyền, rate limit, validate — không tồn tại trên đường của một job. Đó là lý do RLS ở bài rls-second-layer có giá trị riêng: nó là lớp duy nhất nằm sau biên giới này.

Đổi chủ thể là một biên giới không có hình dạng vật lý, và đó là lý do nó bị bỏ. Khi một admin đọc dữ liệu của một người dùng, dữ liệu không đi qua mạng nào mới — nhưng ai được xem nó đã đổi, và đó là một biên giới cần kiểm và cần ghi log.

Và điều quan trọng nhất về biên giới: một biện pháp đặt sai biên giới là một biện pháp không tồn tại. Validate ở frontend là validate ở phía sai của biên giới đầu tiên. Kiểm quyền ở middleware là kiểm ở phía sai của biên giới thứ sáu — đúng thứ bài authn-vs-authz đã lập luận.

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…