Bảo mật

Mô hình bảo mật của chúng tôi trong một câu: không có gì trên máy chủ để tấn công. Mọi thứ dưới đây đều có thể kiểm chứng từ DevTools của bạn.

Kiến trúc

Trình tạo mã là ứng dụng trang đơn tĩnh được phục vụ từ Cloudflare Pages: không tài khoản người dùng, không xác thực, và không có đường dẫn mã backend nào trong luồng tạo mã. Mọi thao tác tạo QR, mã hóa, quét và kết xuất đều chạy hoàn toàn trong trình duyệt của bạn. Một điểm cuối serverless nhỏ nằm cạnh nó và được liệt kê ở đây thay vì giấu đi: /api/contact (biểu mẫu liên hệ, lưu trữ những gì bạn gửi trong Cloudflare D1 và gửi email cho chúng tôi). Nó không được gọi khi bạn tạo mã QR; công cụ kiểm tra an toàn URL là một sản phẩm riêng tại check.qr.abundera.ai. Kiểm tra xem mã QR có an toàn không

Mô hình mối đe dọa

Vì trình tạo mã không thu thập, lưu trữ hay truyền dữ liệu người dùng (hai điểm cuối nói trên chỉ xử lý những gì bạn chủ động gửi cho chúng), các mối đe dọa web phổ biến nhất, đánh cắp thông tin xác thực, vi phạm cơ sở dữ liệu, chiếm quyền phiên, tiêm lệnh phía máy chủ, không áp dụng cho nó. Bề mặt tấn công còn lại là gói tài sản tĩnh (HTML, CSS, JavaScript) được phục vụ từ nguồn gốc của chúng tôi. Chúng tôi thiết kế với các giả định:

Chính sách bảo mật nội dung, theo chỉ thị

Chính sách bên dưới được đọc từ file _headers đã triển khai khi trang này được dựng, nên nó không thể trôi dạt khỏi những gì máy chủ biên gửi đi. Xác minh trong tiêu đề phản hồi của bất kỳ yêu cầu nào.

Content-Security-Policy:
  default-src 'self';
  script-src 'self' https://abundera.ai 'wasm-unsafe-eval' https://challenges.cloudflare.com;
  worker-src 'self' blob:;
  style-src 'self' 'unsafe-inline' https://abundera.ai;
  font-src 'self';
  img-src 'self' data: blob: https:;
  connect-src 'self' https: https://challenges.cloudflare.com;
  frame-src 'self' https://challenges.cloudflare.com;
  frame-ancestors 'none';
  base-uri 'self';
  form-action 'self'

Mỗi chỉ thị cho phép chúng tôi làm gì và đánh đổi ở đâu:

Những gì CSP không thể làm

CSP giới hạn nơi trình duyệt sẽ tải mã. Nó không kiểm tra mã đã tải làm gì. Nếu nguồn gốc của chúng tôi bị xâm phạm, mục đầu tiên trong mô hình mối đe dọa, script của kẻ tấn công sẽ chạy với cùng quyền như của chúng tôi, bao gồm các quyền connect-src và img-src ở trên. Các biện pháp phòng thủ của chúng tôi trước điều đó nằm ở phía trước CSP: các bản triển khai đi qua một tài khoản Cloudflare duy nhất với token có phạm vi giới hạn, tên file tài sản được băm theo nội dung nên một file bị thay thế sẽ làm thay đổi mọi URL tham chiếu đến nó, và service worker chỉ lưu vào cache các phản hồi GET same-origin. Bản tuyên ngôn mô tả trang web như đã phát hành. Đó không phải là tuyên bố rằng không trang web nào có thể gửi dữ liệu đi đâu đó, và chúng tôi muốn bạn quy trách nhiệm cho chúng tôi theo phát biểu hẹp hơn, có thể kiểm chứng được.

Các chính sách CSP khác nhau áp dụng cho /bio/* (nới lỏng img-src cho avatar do người dùng cung cấp) và /embed/* (nới lỏng frame-ancestors cho nhúng có chủ ý). Cả hai đều được ghi lại trong site/_headers.

Tiêu đề truyền tải và đóng khung

Service worker

Service worker của chúng tôi (site/sw.js) chỉ lưu vào cache các tài sản same-origin. Trình xử lý fetch từ chối rõ ràng các yêu cầu cross-origin và các phương thức không phải GET, bạn có thể đọc logic trong /sw.js (mã nguồn được phát hành đủ chưa nén để theo dõi). Các lần ghi vào cache được bọc trong event.waitUntil() để chúng không thể bị bỏ qua giữa điều hướng.

Làm sạch đầu vào

Mọi đường dẫn kết xuất chấp nhận đầu vào của người dùng đều coi nó là văn bản không tin cậy:

Tải hình ảnh cross-origin

Khi người dùng dán URL https: làm ảnh vCard hoặc logo, trình duyệt tải về theo CORS và danh sách cho phép img-src của CSP. Hình ảnh được kết xuất vào canvas. Nó không bao giờ trở thành DOM trực tiếp, không bao giờ chạy như mã, và không bao giờ đến nguồn gốc của chúng tôi, tải về là trình duyệt → hình ảnh từ xa, và kết quả được vẽ phía client. Kẻ tấn công kiểm soát URL hình ảnh từ xa có thể theo dõi rằng URL đã được tải (một dòng log trên máy chủ của họ) nhưng không thể rò rỉ bất cứ điều gì từ trang của chúng tôi.

Tính toàn vẹn tài nguyên con (SRI)

Tất cả JavaScript và CSS chúng tôi cung cấp đều là same-origin. Chúng tôi không tải script hoặc stylesheet của bên thứ ba, vì vậy hash SRI không áp dụng. Nếu chúng tôi từng tải tài sản của bên thứ ba, chúng tôi sẽ thêm thuộc tính SRI integrity vào đó và ghi lại quy trình cập nhật hash trong trang này.

Báo cáo lỗ hổng

Nếu bạn phát hiện vấn đề bảo mật ảnh hưởng đến Abundera QR, trong mã của chúng tôi, triển khai của chúng tôi, hoặc trong một phụ thuộc mà chúng tôi cung cấp, vui lòng báo cáo riêng tư đến security@abundera.ai. Chúng tôi hướng đến việc phân loại trong vòng 72 giờ. Bạn cũng có thể liên hệ qua thông tin liên lạc trong file /.well-known/security.txt của chúng tôi.

Chưa có chương trình thưởng lỗi

Hiện tại chúng tôi không cung cấp tiền thưởng, nhưng mọi báo cáo hợp lệ được xác nhận đều nhận được ghi nhận trong changelog và lời cảm ơn công khai của chúng tôi.

Xác minh những điều trên

Mọi tuyên bố trên trang này đều có thể kiểm chứng từ DevTools của trình duyệt mà không cần tin tưởng chúng tôi:

Liên hệ

Báo cáo bảo mật: security@abundera.ai

Cập nhật lần cuối: 2026-09-03. Lần xem xét tiếp theo: 2026-12-03.