Tới nội dung chính
Z-CMS is being built in the open on GitHub. Tham gia cộng đồng

Tất cả bài viết

Xây dựng Plugin Marketplace an toàn cho Z-CMS

12 thg 7, 2026 · Z-SOFT Admin · Đọc 4 phút

Marketplace phải được xem như một software supply-chain system

Marketplace không chỉ là trang download ZIP

Plugin marketplace phân phối executable code vào production system. Nó phải trả lời được ai tạo package, package có bị thay đổi không, yêu cầu permission gì, version nào có vulnerability và administrator có thể phục hồi thế nào sau một bad update.

Threat model

Các rủi ro chính gồm typosquatting package, publisher account bị compromise, package bị sửa trong quá trình upload hoặc delivery, plugin yêu cầu permission không liên quan, transitive dependency độc hại, cross-tenant access và unauthorized data transfer.

Signed package và immutable release

Mỗi release cần checksum và digital signature. CMS verify checksum, marketplace signature và publisher identity trước khi install. Một version đã publish không được ghi đè; bản sửa lỗi phải dùng version mới để đảm bảo reproducibility và audit.

Developer builds plugin
    ↓
Generate checksum
    ↓
Sign package
    ↓
Marketplace verifies
    ↓
CMS verifies before install

Publisher identity và namespace ownership

Marketplace phân biệt community publisher, verified publisher, verified organization và official package. Namespace dạng @organization/plugin-name giúp giảm giả mạo. Quyền publish được quản lý theo role như Owner, Maintainer, Publisher và Security Reviewer.

Permission manifest và runtime enforcement

Administrator cần thấy rõ plugin có thể đọc, sửa hoặc gửi loại dữ liệu nào. Khi update yêu cầu permission mới, auto-update phải dừng để chờ approval.

Permission không chỉ được kiểm tra lúc install mà còn enforce ở runtime bridge. Plugin không có users:read sẽ không thể gọi users API, dù source code cố thực hiện thao tác đó.

{
  "permissions": [
    "content:read",
    "content:update",
    "http:domain:api.example.com"
  ]
}

Multi-tenant isolation

Mọi API call từ plugin mang tenant context do Core cấp. Plugin không tự chọn tenantId. Database, cache, storage, queue và search layer đều scope theo tenant để ngăn cross-tenant access.

Security scanning pipeline

Pipeline có thể gồm manifest validation, dependency vulnerability scan, static analysis, secret scanning, malware analysis và manual review cho permission nhạy cảm. Pattern như eval(), child_process, process.env, obfuscated code hoặc unrestricted network access cần được đánh dấu để review.

Security advisory, revocation và rollback

Marketplace phải phát hành advisory với affected version, severity và patched version. Khi cần, package có thể bị revoke để chặn install mới và cảnh báo instance đang dùng. Versioned bundle giúp rollback nhanh khi update lỗi.

Audit log và data transparency

Install, approval, activation, permission change và update đều cần audit log. Nếu plugin gửi dữ liệu ra external domain, marketplace phải hiển thị domain, data type và mục đích để administrator quyết định có hiểu biết.

Kết luận

Một marketplace an toàn cần publisher identity, package signing, immutable release, runtime permission, security scanning, multi-tenant isolation, advisory, revocation, audit log và rollback. Mục tiêu không phải tuyên bố mọi plugin tuyệt đối an toàn, mà là giảm rủi ro và tăng khả năng kiểm soát.

Key takeaways

  • Security boundary phải được enforce trong Core, không dựa vào thiện chí của plugin.
  • Lifecycle, permission, tenant context và observability là các phần của cùng một platform contract.
  • Developer experience tốt chỉ bền vững khi runtime và supply chain được thiết kế an toàn từ đầu.

GitHub: https://github.com/zscontributor/z-cms
Website: https://z-cms.org