Dữ liệu an toàn web của Chocon: gói hash dùng để nhận biết tên miền người lớn (NSFW) và cờ bạc (Gambling), cùng công cụ tạo và xác minh gói đó.
English summary: this repository publishes the hashed web-safety data used by Chocon, derived from HaGeZi's NSFW and Gambling DNS blocklists (GPL-3.0). Every release ships the runtime hash package together with its complete corresponding source. See NOTICE.md and FORMAT.md.
Dữ liệu được tạo từ hai danh sách của dự án HaGeZi DNS Blocklists:
| Danh mục | File upstream |
|---|---|
| NSFW | wildcard/nsfw-onlydomains.txt |
| Gambling | wildcard/gambling-onlydomains.txt |
HaGeZi phát hành các danh sách này theo GNU GPL phiên bản 3. Gói hash là bản chuyển đổi của dữ liệu đó, nên được phát hành theo cùng giấy phép và luôn đi kèm nguồn tương ứng. Công cụ trong repo này cũng theo GNU GPL phiên bản 3 (LICENSE). Chi tiết về nguồn gốc và các thay đổi: NOTICE.md. Cách từng nghĩa vụ của giấy phép được đáp ứng: COMPLIANCE.md.
Mọi bản phát hành nằm tại
Releases, tag dạng
data-YYYYMMDD-NNN. Mỗi bản có ba file:
| File | Nội dung |
|---|---|
manifest.json |
Phiên bản, checksum, đường tải và chữ ký Ed25519 |
runtime.zip |
web-safety.bin (bảng hash) cùng LICENSE, NOTICE.md, SOURCE.md |
corresponding-source.tar.gz |
Nguồn tương ứng của đúng bản đó |
runtime.zipkhông chứa tên miền dạng rõ. Ứng dụng Chocon chỉ tảimanifest.jsonvàruntime.zip.corresponding-source.tar.gzchứa danh sách tên miền gốc lấy từ HaGeZi tại đúng commit đã dùng, các điều chỉnh của Chocon, script, cấu hình và hướng dẫn tạo lại. File này dành cho người chủ động tải nguồn.- Mục "Source code (zip/tar.gz)" do GitHub tự tạo ở mỗi Release chỉ chứa công
cụ, không chứa dữ liệu đầu vào. Nguồn tương ứng đầy đủ là
corresponding-source.tar.gz. - Bản đã phát hành không bị sửa. Khi cần thay đổi dữ liệu, một bản mới được tạo.
- Tải hai danh sách và giấy phép của HaGeZi tại một commit cố định.
- Chuẩn hóa từng tên miền (chữ thường, punycode), bỏ dòng không hợp lệ, loại các mục trong config/allowlist.txt. Build dừng nếu danh sách bị hụt bất thường hoặc nếu một tên miền trong config/never-block.txt bị chặn.
- Thay mỗi tên miền bằng 8 byte đầu của SHA-256, sắp xếp theo từng danh mục và
ghi vào
web-safety.bin. - Đóng gói
runtime.zipvàcorresponding-source.tar.gz, ghi checksum vàomanifest.jsonrồi ký bằng khóa Ed25519. - Trước khi phát hành, giải nén gói nguồn và tạo lại
runtime.ziptừ đó; hai bản phải trùng từng byte.
Bản mới được tạo khoảng mỗi tháng một lần và chỉ được phát hành khi bảng hash thực sự thay đổi. Chocon không chạy theo dữ liệu mới nhất của upstream.
Định dạng file, cách tra cứu và quy trình cập nhật cho ứng dụng: FORMAT.md.
Cần Node.js 22.2 trở lên, không cần cài thêm gói nào.
# Xác minh một bản đã tải (ba file trong cùng thư mục), kể cả tạo lại từ nguồn
node scripts/verify.mjs <thư-mục> --rebuild
# Tạo thử một bản từ dữ liệu HaGeZi mới nhất, không ký
node scripts/build.mjs --version data-20260101-001 --unsigned --out dist
node scripts/verify.mjs dist --allow-unsigned --rebuild
# Chạy test
npm testHướng dẫn tạo lại từ gói nguồn của một bản cụ thể: REBUILD.md.
manifest.json được ký bằng Ed25519. Khóa công khai nằm ở
keys/web-safety-ed25519.pub.pem; khóa riêng
không có trong repo. Việc ký và phát hành chỉ chạy trên nhánh main, theo lịch
hoặc do người duy trì kích hoạt; pull request không chạy được bước này.
- Trang học tập hoặc trang phù hợp với trẻ bị chặn nhầm: mở issue "Chặn nhầm". Lỗi thuộc về danh sách gốc cũng nên được báo cho HaGeZi.
- Sửa công cụ hoặc tài liệu: xem CONTRIBUTING.md.
- Lỗ hổng bảo mật: báo riêng theo SECURITY.md.
config/ Danh sách upstream được dùng, ngưỡng kiểm tra, allowlist, never-block
keys/ Khóa công khai xác minh manifest
scripts/ build.mjs, verify.mjs, release-notes.mjs và thư viện dùng chung
tests/ Test của công cụ
.github/ Workflow kiểm tra và phát hành