Keselamatan

Model keselamatan kami dalam satu ayat: tiada apa-apa di pelayan yang boleh diserang. Semua di bawah boleh disahkan daripada DevTools anda.

Seni Bina

Penjana ini ialah aplikasi halaman tunggal statik yang dihidangkan daripada Cloudflare Pages: tiada akaun pengguna, tiada pengesahan, dan tiada laluan kod bahagian belakang di mana-mana dalam aliran penjanaan. Setiap operasi penjanaan, pengekodan, pengimbasan, dan pemaparan kod QR dijalankan sepenuhnya dalam penyemak imbas anda. Satu titik akhir tanpa pelayan yang kecil berada di sisinya dan disenaraikan di sini dan bukan disembunyikan: /api/contact (borang hubungi, yang menyimpan apa yang anda hantar dalam Cloudflare D1 dan meng-e-melkannya kepada kami). Ia tidak dipanggil semasa anda membuat kod QR; penyemak keselamatan URL adalah produk berasingan di check.qr.abundera.ai. Semak sama ada kod QR selamat

Model ancaman

Oleh sebab penjana ini tidak mengumpul, menyimpan, dan menghantar sebarang data pengguna (dua titik akhir di atas hanya mengendalikan apa yang anda hantar secara eksplisit kepadanya), ancaman aplikasi web yang paling biasa, pencurian kelayakan, pelanggaran pangkalan data, rampasan sesi, suntikan sisi pelayan, tidak terpakai kepadanya. Permukaan serangan yang tinggal ialah pakej aset statik (HTML, CSS, JavaScript) yang dihidangkan daripada origin kami. Kami mereka bentuk dengan andaian:

Dasar Keselamatan Kandungan, mengikut direktif

Dasar di bawah dibaca daripada fail _headers yang digunakan sebenar semasa halaman ini dibina, jadi ia tidak boleh terpesong daripada apa yang dihantar oleh edge. Sahkan dalam pengepala tindak balas untuk sebarang permintaan.

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 membenarkan kami lakukan dan di mana ia berkompromi:

Apa yang CSP tidak boleh lakukan

CSP mengehadkan dari mana penyemak imbas akan memuatkan kod. Ia tidak menyemak apa yang dilakukan oleh kod yang dimuatkan itu. Jika origin kami pernah terjejas, item pertama dalam model ancaman, skrip penyerang akan berjalan dengan kebenaran yang sama seperti kod kami, termasuk kebenaran connect-src dan img-src di atas. Pertahanan kami terhadap perkara itu berada di hulu CSP: deploy dihantar melalui satu akaun Cloudflare dengan token berskop, nama fail aset di-hash mengikut kandungan supaya fail yang ditukar ganti mengubah setiap URL yang merujuknya, dan pekerja perkhidmatan hanya menyimpan cache respons GET same-origin. Manifesto menerangkan laman ini sebagaimana ia dihantar. Ia bukan dakwaan bahawa tiada halaman web boleh menghantar data ke mana-mana; kami lebih suka anda pegang kami pada kenyataan yang lebih sempit dan boleh disemak itu.

Dasar CSP yang berbeza terpakai untuk /bio/* (longgarkan img-src untuk avatar yang dibekalkan pengguna) dan /embed/* (longgarkan frame-ancestors untuk pembenaman yang disengajakan). Kedua-duanya didokumenkan dalam site/_headers.

Pengepala pengangkutan dan pembingkaian

Pekerja perkhidmatan

Pekerja perkhidmatan kami (site/sw.js) hanya menyimpan aset same-origin dalam cache. Pengendali fetch secara eksplisit menolak permintaan cross-origin dan kaedah bukan GET, anda boleh membaca logiknya di /sw.js (sumbernya dihantar tanpa minifikasi yang mencukupi untuk diikuti). Penulisan cache dibungkus dalam event.waitUntil() supaya tidak boleh digugurkan di tengah navigasi.

Pembersihan input

Setiap laluan pemaparan yang menerima input pengguna melayan ia sebagai teks tidak dipercayai:

Pengambilan imej cross-origin

Apabila pengguna menampal URL https: sebagai foto vCard atau logo, penyemak imbas mengambilnya tertakluk kepada CORS dan senarai benarkan img-src CSP kami. Imej dipapar ke dalam kanvas. Ia tidak pernah menjadi DOM langsung, tidak pernah dijalankan sebagai kod, dan tidak pernah sampai ke origin kami, pengambilan adalah penyemak imbas → imej jauh, dan hasilnya dilukis pada sisi klien. Penyerang yang mengawal URL imej jauh boleh menjejaki bahawa URL telah dimuatkan (baris log pada pelayan mereka sendiri) tetapi tidak boleh mengekstrak apa-apa daripada halaman kami.

Integriti Subresource (SRI)

Semua JavaScript dan CSS yang kami hantar adalah same-origin. Kami tidak memuatkan skrip atau helaian gaya pihak ketiga, jadi hash SRI tidak terpakai. Jika kami pernah memuatkan aset pihak ketiga, kami akan menghantar atribut integrity SRI padanya dan mendokumenkan proses kemas kini hash dalam halaman ini.

Melaporkan kerentanan

Jika anda menemui isu keselamatan yang menjejaskan Abundera QR, sama ada dalam kod kami, deployment kami, atau dalam kebergantungan yang kami hantar, sila laporkannya secara peribadi ke security@abundera.ai. Kami berhasrat untuk melakukan triaj dalam masa 72 jam. Anda juga boleh menghubungi kami melalui butiran hubungan dalam fail /.well-known/security.txt kami.

Tiada bug bounty (buat masa ini)

Kami tidak menawarkan hadiah berbayar buat masa ini, tetapi setiap laporan sah yang disahkan menerima kredit dalam changelog dan ucapan terima kasih awam kami.

Sahkan mana-mana perkara di atas

Setiap dakwaan di halaman ini boleh disahkan daripada DevTools penyemak imbas anda tanpa mempercayai kami:

Hubungi

Pendedahan keselamatan: security@abundera.ai

Kemas kini terakhir: 2026-09-03. Semakan seterusnya: 2026-12-03.