Keamanan

Model keamanan kami dalam satu kalimat: tidak ada apa pun di server yang bisa diserang. Semua yang ada di bawah ini dapat diverifikasi dari DevTools Anda.

Arsitektur

Generator ini adalah aplikasi satu halaman statis yang disajikan dari Cloudflare Pages: tidak ada akun pengguna, tidak ada autentikasi, dan tidak ada jalur kode backend di mana pun dalam alur pembuatan kode. Setiap operasi pembuatan, pengkodean, pemindaian, dan rendering kode QR berjalan sepenuhnya di dalam browser Anda. Satu endpoint serverless kecil berada di sampingnya dan disebutkan di sini alih-alih disembunyikan: /api/contact (formulir kontak, yang menyimpan apa yang Anda kirimkan di Cloudflare D1 dan mengirimkannya lewat email kepada kami). Endpoint ini tidak dipanggil saat Anda membuat kode QR; pemeriksa keamanan URL adalah produk terpisah di check.qr.abundera.ai. Periksa apakah kode QR aman

Model ancaman

Karena generator tidak mengumpulkan, menyimpan, dan mengirimkan data pengguna (dua endpoint di atas hanya menangani apa yang secara eksplisit Anda kirimkan), ancaman aplikasi web yang paling umum, pencurian kredensial, pelanggaran basis data, pembajakan sesi, injeksi sisi server, tidak berlaku padanya. Permukaan serangan yang tersisa adalah bundel aset statis (HTML, CSS, JavaScript) yang disajikan dari origin kami. Kami merancang dengan asumsi:

Kebijakan Keamanan Konten, per direktif

Kebijakan di bawah ini dibaca dari berkas _headers yang di-deploy pada saat halaman ini dibangun, sehingga tidak mungkin menyimpang dari apa yang dikirim oleh edge. Verifikasi di header respons permintaan apa pun.

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'

Apa yang setiap direktif memungkinkan kami lakukan dan di mana berkompromi:

Apa yang tidak bisa dilakukan CSP

CSP membatasi dari mana browser boleh memuat kode. CSP tidak memeriksa apa yang dilakukan oleh kode yang sudah dimuat. Jika origin kami pernah dikompromikan, item pertama dalam model ancaman, skrip penyerang akan berjalan dengan izin yang sama seperti kode kami, termasuk keleluasaan connect-src dan img-src di atas. Pertahanan kami terhadap hal itu berada di hulu CSP: deploy dilakukan melalui satu akun Cloudflare dengan token berlingkup, nama berkas aset di-hash berdasarkan konten sehingga berkas yang ditukar mengubah setiap URL yang merujuknya, dan service worker hanya menyimpan cache respons GET same-origin. Manifesto menggambarkan situs sebagaimana ia dikirimkan. Ini bukan klaim bahwa tidak ada halaman web yang bisa mengirim data ke suatu tempat, dan kami lebih suka Anda menuntut kami pada pernyataan yang lebih sempit dan dapat diperiksa ini.

Kebijakan CSP yang berbeda berlaku untuk /bio/* (longgarkan img-src untuk avatar yang disediakan pengguna) dan /embed/* (longgarkan frame-ancestors untuk penyematan yang disengaja). Keduanya didokumentasikan di site/_headers.

Header transport dan framing

Service worker

Service worker kami (site/sw.js) hanya menyimpan aset same-origin dalam cache. Pengendali fetch secara eksplisit menolak permintaan cross-origin dan metode non-GET, Anda dapat membaca logikanya di /sw.js (sumbernya dikirimkan cukup tidak terminifikasi untuk diikuti). Penulisan cache dibungkus dalam event.waitUntil() sehingga tidak dapat dihapus di tengah navigasi.

Sanitasi input

Setiap jalur rendering yang menerima input pengguna memperlakukannya sebagai teks tidak tepercaya:

Pengambilan gambar cross-origin

Ketika pengguna menempelkan URL https: sebagai foto vCard atau logo, browser mengambilnya tunduk pada CORS dan daftar izin img-src CSP kami. Gambar dirender ke dalam kanvas. Gambar tidak pernah menjadi DOM langsung, tidak pernah dijalankan sebagai kode, dan tidak pernah mencapai origin kami, pengambilan adalah browser → gambar jarak jauh, dan hasilnya dilukis di sisi klien. Penyerang yang mengendalikan URL gambar jarak jauh dapat melacak bahwa URL tersebut dimuat (baris log di server mereka sendiri) tetapi tidak dapat mengekstrak apa pun dari halaman kami.

Integritas Subresource (SRI)

Semua JavaScript dan CSS yang kami kirimkan adalah same-origin. Kami tidak memuat skrip atau lembar gaya pihak ketiga, sehingga hash SRI tidak berlaku. Jika kami pernah memuat aset pihak ketiga, kami akan mengirimkan atribut integrity SRI padanya dan mendokumentasikan proses pembaruan hash di halaman ini.

Melaporkan kerentanan

Jika Anda menemukan masalah keamanan yang mempengaruhi Abundera QR, baik dalam kode kami, deployment kami, atau dalam dependensi yang kami kirimkan, harap laporkan secara pribadi ke security@abundera.ai. Kami bertujuan untuk melakukan triage dalam 72 jam. Anda juga dapat menghubungi kami melalui detail kontak di file /.well-known/security.txt kami.

Belum ada bug bounty

Kami saat ini tidak menawarkan hadiah berbayar, tetapi setiap laporan valid yang dikonfirmasi menerima kredit di changelog dan ucapan terima kasih publik kami.

Verifikasi hal di atas

Setiap klaim di halaman ini dapat diverifikasi dari DevTools browser Anda tanpa harus mempercayai kami:

Kontak

Pengungkapan keamanan: security@abundera.ai

Terakhir diperbarui: 2026-09-03. Tinjauan berikutnya: 2026-12-03.