How to Think About Security in Next.js

Bài tóm tắt Vercel 2023 3. Quy mô lớn Độ khó: Trung bình

Vercel · 2023 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc

Vercel vừa làm framework Next.js vừa bán nền tảng chạy nó; nhận định về sản phẩm của họ trong trang này đều là "theo Vercel".

Bối cảnh

  • Server Components làm mờ ranh giới server/client: props truyền xuống client component có thể mang theo dữ liệu nhạy cảm mà không ai để ý. Bài hướng dẫn nhóm bảo mật của Vercel cách nghĩ về mô hình này.

Ba ý chính (theo Vercel)

  • Gom mọi truy cập dữ liệu vào một lớp (Data Access Layer): một thư viện nội bộ, mỗi hàm nhận người dùng hiện tại, kiểm quyền rồi mới trả DTO đã lọc; chỉ lớp này đọc secret. Bài khuyên cách này cho dự án mới, so với truy vấn thẳng trong component (chỉ hợp prototype) hay gọi như một HTTP API tách riêng.
  • Server Action là endpoint công khai: "use server" mở một endpoint cho mỗi hàm export; ai biết id gọi được với tham số tuỳ ý, nên kiểm quyền và kiểm đầu vào ngay trong hàm, như với mọi API.
  • Cơ chế đánh dấu chỉ là lưới an toàn: server-only, taint (lúc đó còn thử nghiệm) bắt được vài sai sót nhưng không chặn giá trị suy ra từ dữ liệu đã đánh dấu.

Bài học cho SWE

  • Chốt một chỗ duy nhất đọc secret và dữ liệu, trả về object đã lọc, thay vì rải kiểm quyền khắp UI.
  • Endpoint do framework sinh ra vẫn là API công khai.
  • Đánh dấu kiểu taint không thay việc không đưa dữ liệu nhạy cảm vào vùng đó.

Liên quan