Giao thức CLV1 đã công khaiĐọc đặc tả
Mục lục thư viện

Thư viện tài liệuBảo mật

Kiểm soát truy cập

Kiểm soát truy cập cho phép bạn chặn, hoặc chỉ cho phép, yêu cầu từ phần mềm theo địa chỉ IP, dải mạng hoặc quốc gia. Ở Bảo vệ Advanced, luật được kiểm tra ở mọi lệnh gọi của SDK, trước cả bước kiểm tra license, nên một mạng đã bị chặn không đi được tới đâu.

8 phút đọc

Khi nào nên dùng

  • Chặn một IP hoặc dải mạng đang dò key hay gửi yêu cầu bất thường.
  • Chỉ phục vụ khách ở những quốc gia bạn phân phối sản phẩm.
  • Phần mềm nội bộ chỉ được chạy trong mạng công ty: chỉ cho phép dải IP văn phòng.

Muốn giữ một máy ở ngoài, hãy chặn nó ở tab Thiết bị của Người dùng cuối › Thiết bị & phiên, xem Thiết bị, HWID và chuyển máy.

Luật truy cập chỉ chạy ở Bảo vệ Advanced, chế độ có trên mọi gói. Ở Bảo vệ Standard, luật vẫn được lưu nhưng không có tác dụng, và form thêm luật bị ẩn. Khi chưa có luật nào, ai có license hợp lệ cũng đăng nhập được. Xem Hai chế độ bảo vệ.

Ba loại luật

LoạiGiá trịKhớp khi
Địa chỉ IP203.0.113.7IP của yêu cầu trùng chính xác từng ký tự
Dải mạng (CIDR)203.0.113.0/24, 2001:db8::/32IP của yêu cầu nằm trong dải
Quốc giaVN, JPMã quốc gia của yêu cầu trùng giá trị

IP và dải mạng

Luật Địa chỉ IP so chuỗi chính xác, nên nhập IP trần, không kèm /prefix. Luật Dải mạng (CIDR) bắt buộc có prefix, ví dụ /24. Cả IPv4 lẫn IPv6 đều được. Với IPv6, nên dùng CIDR (kể cả /128 cho một địa chỉ), vì CIDR so theo giá trị nên không phụ thuộc cách viết rút gọn.

IP được so là IP mà server nhìn thấy. Khi API chạy sau proxy, server lấy IP thật từ header do lớp edge gắn vào (biến môi trường TRUSTED_IP_HEADER, nhận cf-connecting-ip hoặc x-real-ip).

Quốc gia

Nhập mã hai chữ cái in hoa như VN, US. Dashboard tự chuyển chữ thường thành chữ hoa.

Loại Quốc gia chỉ hiện khi API chạy sau Cloudflare với TRUSTED_IP_HEADER=cf-connecting-ip; mã quốc gia lấy từ header cf-ipcountry mà Cloudflare gắn vào. Với cấu hình khác, loại này bị ẩn.

Thêm và xoá luật trong dashboard

  1. Mở ứng dụng, vào Bảo mật ứng dụng › Bảo vệ, tab Quy tắc truy cập. Ở Bảo vệ Standard, hãy bật Bảo vệ Advanced trước.
  2. Ở ô Loại, chọn Địa chỉ IP, Dải mạng (CIDR) hoặc Quốc gia. Ô Giá trị hiện mẫu định dạng cho loại đã chọn.
  3. Ở ô Hành động, chọn Chặn hoặc Chỉ cho phép. Khi chọn Chỉ cho phép, dashboard nhắc: "Khi một loại có luật cho phép, mọi giá trị khác của loại đó đều bị chặn".
  4. Nhập Giá trị và, nếu muốn, Ghi chú (tối đa 200 ký tự), ví dụ "dò key ngày 02/11" hay "VPN văn phòng".
  5. Bấm Thêm luật. Luật có hiệu lực từ yêu cầu kế tiếp, không cần phát hành lại phần mềm.

Bảng bên dưới liệt kê luật mới nhất trước, với các cột Hành động, Loại, Giá trị, Ghi chú và Ngày tạo. Bấm biểu tượng thùng rác (Xoá) ở cuối dòng rồi xác nhận để xoá luật.

Không có nút sửa. Để đổi hành động hay ghi chú, thêm lại đúng Loại và Giá trị đó: server cập nhật luật cũ thay vì tạo bản trùng, và ghi chú mới (kể cả để trống) thay ghi chú cũ.

Chỉ Quản trị và Chủ sở hữu được thêm, xoá luật; Thành viên chỉ xem. Xem vai trò trong workspace.

Chặn và danh sách cho phép

  • Chặn: yêu cầu khớp bất kỳ luật chặn nào đều bị từ chối.
  • Chỉ cho phép: biến loại đó thành danh sách trắng. Khi một loại có ít nhất một luật cho phép, yêu cầu phải khớp một trong các giá trị cho phép của loại đó. Loại không có luật cho phép thì không bị giới hạn.
  • Danh sách cho phép của các loại khác nhau cộng dồn: yêu cầu phải qua tất cả.
  • Chặn luôn thắng cho phép.

Ví dụ một app chạy sau Cloudflare có ba luật: Chỉ cho phép quốc gia VN, Chỉ cho phép quốc gia JP, Chặn dải 203.0.113.0/24.

Yêu cầuKết quả
Từ VN, IP 198.51.100.4Qua
Từ JP, IP 198.51.100.9Qua
Từ VN, IP 203.0.113.50access_blocked, khớp luật chặn
Từ US, IP 198.51.100.4access_blocked, ngoài danh sách quốc gia

Nếu thêm Chỉ cho phép dải 198.51.100.0/24, khách ở VN nhưng ngoài dải đó cũng bị chặn, vì giờ yêu cầu phải qua cả danh sách quốc gia lẫn danh sách dải mạng.

Thứ tự kiểm tra

Mỗi yêu cầu từ SDK đi qua các bước sau và dừng ở bước đầu tiên thất bại:

  1. Chữ ký, đồng hồ và nonce (bad_signature, clock_skew, replayed_request).
  2. Ứng dụng có đang nhận đăng nhập không (app_paused).
  3. IP có đang bị Protect 24/7 chặn tạm thời không (access_blocked), ở cả hai chế độ bảo vệ.
  4. Ở Bảo vệ Advanced, các luật Chặn (access_blocked).
  5. Ở Bảo vệ Advanced, danh sách Chỉ cho phép của từng loại (access_blocked).
  6. Sau đó mới tới chế độ đăng nhập, bảo trì, phiên bản tối thiểu và license, như mô tả ở Khái niệm cốt lõi.

Vài hệ quả cần biết:

  • Luật áp dụng cho mọi lệnh gọi client: init(), activate(), trial(), login(), heartbeat(), variables(), checkUpdates(), logout(). Phần mềm đang chạy bị từ chối ở lệnh gọi kế tiếp, thường là heartbeat().
  • Luật không kết thúc phiên mà từ chối từng yêu cầu. Gỡ luật thì phiên còn hạn chạy tiếp bình thường.
  • Key chưa hề được kiểm tra khi yêu cầu bị chặn, nên key đúng hay sai đều nhận cùng một câu trả lời.
  • Luật không áp dụng cho dashboard, cổng khách hàng hay Seller API. Khoá Seller API có danh sách IP được phép riêng ở Kinh doanh › Khoá Seller API.

Lỗi access_blocked

Yêu cầu bị chặn nhận HTTP 403 với mã access_blocked. Thông điệp kết thúc bằng "is blocked" khi khớp luật chặn hoặc IP bị Protect chặn, và "is not allowed" khi nằm ngoài danh sách cho phép. Câu trả lời được ký như mọi câu trả lời khác, nên SDK tin được và ném ClavisError:

import { ClavisError } from "@clavisauh/sdk";

try {
  await clavis.init();
  await clavis.activate(licenseKey);
} catch (err) {
  if (err instanceof ClavisError && err.code === "access_blocked") {
    // Đừng thử lại liên tục: kết quả không đổi cho tới khi luật thay đổi
    showMessage("Không thể kết nối từ mạng hoặc thiết bị này. Vui lòng liên hệ người bán.");
  }
}

Protect 24/7 ghi các yêu cầu bị luật chặn thành tín hiệu Bị chặn bởi luật truy cập (mức thấp) kèm IP và quốc gia. Yêu cầu bị chặn dừng trước bước xử lý license nên không xuất hiện trong Bảo mật ứng dụng › Nhật ký hoạt động.

Chặn IP tạm thời từ Protect 24/7

Ngoài các luật trên, Protect 24/7 giữ một danh sách IP bị chặn tạm thời của riêng nó. Lệnh chặn này có hiệu lực ở cả hai chế độ bảo vệ, và tab Quy tắc truy cập liệt kê chúng dưới mục Địa chỉ IP đang bị chặn:

  • Tự động: khi Xử lý theo mức rủi ro ở chế độ Tự xử lý (chạy trên Premium, gói Basic chỉ cảnh báo), IP nào nhập sai key hoặc mật khẩu tới lần thứ 20 trong 15 phút (tín hiệu Dò key (brute-force)) bị chặn 24 giờ.
  • Thủ công: trong Bảo mật ứng dụng › Bảo vệ, ở danh sách Cần xử lý, bấm Chặn IP cạnh một chủ thể IP rồi nhập lý do. Ngăn chi tiết sự cố của một IP cũng có nút này. Lệnh chặn kéo dài 24 giờ rồi tự hết.
  • Bỏ chặn sớm: ở tab Quy tắc truy cập, bấm Gỡ chặn cạnh IP đó rồi nhập lý do. Hoàn tác cạnh dòng Chặn IP trong một sự cố cũng có tác dụng tương tự.

Lệnh chặn của Protect chỉ áp dụng cho đúng một IP, được kiểm tra trước mọi luật và thắng cả Chỉ cho phép. IP đang bị chặn có nhãn Đang chặn trong mục IP đáng ngờ nhất của khung Nguồn. Thay đổi có hiệu lực trong vòng khoảng 15 giây.

Quản lý luật qua Seller API

Seller API có ba endpoint: GET /apps/{appId}/rules (quyền rules:read), POST /apps/{appId}/rules và DELETE /rules/{id} (quyền rules:write). Body nhận kind (ip, cidr, country), value, action (block hoặc allow, mặc định block) và note. Mã quốc gia phải gửi sẵn chữ hoa; giá trị sai loại bị từ chối với validation_failed. Luật thêm theo cách này cũng chỉ chạy ở Bảo vệ Advanced.

curl -X POST https://api.example.com/seller/v1/apps/app_…/rules \
  -H "Authorization: Bearer <seller_api_key>" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: block-203-0-113-0" \
  -d '{"kind":"cidr","value":"203.0.113.0/24","action":"block","note":"dò key"}'

Server trả HTTP 201 với { "data": { "id": "rule_…", ... } }. Chi tiết xác thực và mã lỗi có trong tham chiếu Seller API.

Liên quan

Bạn cần giúp gì?

Câu hỏi thường gặp

ClavisAUH là gì?

Dịch vụ bản quyền và xác thực cho phần mềm desktop: license key, khoá thiết bị, đăng nhập người dùng và phản hồi có chữ ký. Tất cả quản lý trên một dashboard

Vì sao kẻ crack không làm giả được server?

SDK chỉ tin câu trả lời ký bằng khoá bí mật của ứng dụng. Khoá đó không bao giờ rời server của chúng tôi, nên server giả không ký được và bị từ chối

Trong file chạy của tôi có gì?

Mã ứng dụng và khoá công khai. Không có bí mật nào, vì mỗi thiết bị tự tạo cặp khoá riêng ở lần chạy đầu

Có chạy được khi offline không?

Có. Mọi gói đều có token offline có chữ ký dùng được 7 ngày, ứng dụng tự kiểm tra tại máy. Premium cho bạn chọn bao lâu. License đã thu hồi vẫn có thể chạy offline trong khoảng đó, trừ khi Chế độ chỉ online đang bật

Hỗ trợ những ngôn ngữ nào?

Hiện có JavaScript và TypeScript. Tiếp theo là C++, C# và Python, cùng một giao thức công khai

Gói Basic có miễn phí thật không?

Có. Không giới hạn thời gian, không cần thẻ. Cần nhiều hơn thì lên Premium

Liên hệ