Moviento 0deps: Phụ thuộc cục bộ và Bảo mật

Các nhà phát triển phần mềm cài đặt hàng trăm thư viện bên ngoài trong hầu hết các dự án. Các framework hiện đại dựa vào hàng ngàn phụ thuộc bắc cầu (transitive dependencies). Điều này có nghĩa là ứng dụng của bạn đang chạy mã được viết bởi hàng trăm người không quen biết.

Hệ sinh thái này giúp đẩy nhanh tốc độ phát triển, nhưng nó cũng tạo ra những rủi ro chuỗi cung ứng khổng lồ.

Phong trào 0deps đặt ra một câu hỏi đơn giản: Điều gì sẽ xảy ra nếu ứng dụng của bạn chỉ chạy mã mà bạn thực sự kiểm soát?

Mỗi phụ thuộc đều thêm vào một bề mặt tấn công mới. Một phụ thuộc có thể:

  • Gây ra các lỗ hổng bảo mật.
  • Trở thành mục tiêu của các cuộc tấn công chuỗi cung ứng.
  • Bị người tạo bỏ rơi.
  • Thay đổi API công khai của nó.
  • Làm mất khả năng tương thích ngược.

Trong mô hình 0deps, bạn chuyển tất cả các phụ thuộc cần thiết trực tiếp vào kho lưu trữ (repository) dự án của mình. Bạn ngừng tải các gói một cách linh hoạt trong quá trình build. Mọi thứ cần thiết để chạy ứng dụng đều nằm trong repository ngay từ khoảnh khắc bạn clone nó.

Cách tiếp cận này mang lại:

  • Các bản build có thể tái lập (reproducible builds).
  • Ít phụ thuộc hơn vào các kho lưu trữ gói (package registries) bên ngoài.
  • Kiểm tra bảo mật tập trung.
  • Kết quả có thể dự đoán được.

Mục tiêu không phải là làm cho mã nguồn trở nên tĩnh. Các bản thực thi (implementations) và thuật toán phải phát triển để sửa lỗi và duy trì tính bảo mật. Mục tiêu là giữ cho "hợp đồng" công khai luôn ổn định.

Mỗi thư viện cung cấp một giao diện (interface) cụ thể. Ví dụ:

  • authenticate()
  • createSession()
  • verifyPasskey()

Các hàm này tạo thành một hợp đồng. Hợp đồng này vẫn giữ nguyên ngay cả khi bạn viết lại mã nguồn bên dưới. Bạn có thể thay thế các thư viện hoặc thay đổi các giao thức mà không làm hỏng phần còn lại của ứng dụng.

Khi một lỗ hổng xuất hiện, bạn thường đối mặt với hai vấn đề:

  1. Sửa lỗi.
  2. Kiểm tra xem bản cập nhật có làm hỏng ứng dụng của bạn hay không.

Trong kiến trúc 0deps, vấn đề thứ hai sẽ biến mất. Bạn chỉ cần cập nhật phần thực thi đằng sau giao diện. API công khai vẫn giữ nguyên. Ứng dụng của bạn tiếp tục hoạt động mà không cần thay đổi mã nguồn.

Bằng cách cô lập mã bên ngoài đằng sau các bộ chuyển đổi (adapters) nội bộ, bạn giảm thiểu rủi ro dài hạn. Nếu một thư viện biến mất vào ngày mai, bạn chỉ cần cập nhật bộ chuyển đổi đó.

0deps không chống lại mã nguồn mở. Nó thay đổi cách bạn tiêu thụ mã nguồn mở. Các thư viện trở thành các thành phần tích hợp thay vì là các liên kết bên ngoài mang tính động.

Điều này tạo ra phần mềm có thể dự đoán được, có khả năng phục hồi và dễ bảo trì. Các bản thực thi tiến hóa. Hợp đồng vẫn giữ nguyên.

Source: https://dev.to/fullagenticstack/movimiento-0deps-dependencias-locales-contratos-inmutables-y-seguridad-por-diseno-1a6o