Keselamatan di qub

Tarikh berkuat kuasa: 23 September 2026 Versi: 1.1 — semakan ketepatan pelaksanaan


Untuk penyelidik — rujukan ringkas:

Butiran penuh terdapat dalam §12 (Pendedahan Diselaras).


Siapa Kami

qub.social dikendalikan oleh VSPRY AUSTRALIA PTY LIMITED (ABN 41 631 026 330), Level 38, 71 Eagle Street, Brisbane QLD 4000, Australia. Rujukan kepada "qub", "kami", "kita", dan "kami punya" bermaksud entiti tersebut.

Hubungan keselamatan: support@qub.social dengan awalan subjek [SECURITY].


1. Pendekatan Kami

qub ialah infrastruktur kepercayaan. Produk tidak bernilai jika ia tidak selamat, jadi keselamatan bukan ciri — ia adalah substrat. Halaman ini menerangkan, dalam istilah konkrit, bagaimana kami menjaga timbunan kami, data anda, dan integriti kandungan yang dimeterai.

Nilai komitmen temporal yang boleh disahkan meningkat apabila semakin banyak kandungan internet dijana mesin. Transaksi storan atau labuh log ketelusan yang disahkan boleh membuktikan bahawa teks sifer telah wujud selewat-lewatnya pada masa bloknya; artifak yang dimeterai pula membuktikan integriti kandungan, pengikatan pusingan drand, dan sebarang tandatangan kepengarangan. Membezakan dakwaan ini ialah piawaian yang digunakan pada halaman ini.

Kami tidak meminta anda mempercayai kami. Kami mereka bentuk supaya kepercayaan yang diperlukan daripada kami sekecil mungkin, dan di mana kepercayaan diperlukan kami menjelaskan dengan tepat apa yang dipercayai dan mengapa.

Tiga prinsip mendorong setiap keputusan reka bentuk:


2. Model Ancaman

2.1 Apa Yang Kami Lindungi Terhadap

2.2 Apa Yang Kami Tidak Boleh Lindungi Terhadap

Kami jujur tentang had kami. qub tidak boleh mempertahankan terhadap:


3. Kriptografi Sisi Klien

Dalam aliran mesej pelayar lalai, penyulitan kandungan berlaku sebelum permintaan muat naik. Dua laluan nyata berbeza: Builder /api/v1/seal sengaja menghantar teks biasa dan K yang dijana pemanggil kepada Worker untuk pemeteraian dalam memori, manakala pementasan/penandatanganan bersama perjanjian menghantar perjanjian berstruktur yang ditandatangani kepada perkhidmatan supaya artifak dwihala dapat dimuktamadkan. Kedua-dua pengecualian ini tidak boleh disamakan dengan penyulitan hujung ke hujung laluan pelayar.

3.1 Penyulitan Kunci Masa

qub menggunakan tlock — penyulitan berasaskan identiti yang berkunci kepada pusingan beacon drand masa depan. Penyulitan berlanjutan dalam pelayar anda menggunakan kunci awam rangkaian drand; kunci penyahsulitan dilepaskan secara awam oleh rangkaian drand hanya apabila pusingan sasaran dicapai. Tiada sesiapa, termasuk kami, boleh membina semula kunci penyahsulitan terlebih dahulu.

Kami menyasarkan rantaian quicknet:

Kunci awam dan masa genesis rantaian quicknet dikompilkan ke dalam klien. Kami tidak mengambil parameter rantaian pada masa runtime, jadi nod berniat jahat tidak boleh menggantikan rantaian yang kami kawal.

3.2 Penyulitan Simetri

Skema tlock membungkus kunci kandungan AES-256-GCM. AES-GCM menyediakan penyulitan disahkan: satu bit dibalikkan dalam ciphertext menyebabkan penyahsulitan gagal, bukannya menghasilkan teks biasa yang rosak senyap.

3.3 Pensirilan Berkanun

Struktur protokol disirikan menggunakan CBOR deterministik (RFC 8949 §4.2 pengekodan deterministik teras). Dua pelaksanaan yang mengekod struktur logik yang sama menghasilkan CBOR yang sama. Muatan dimeterai lengkap tidak deterministik: penyulitan tlock dan pembungkus luar menggunakan kerawakan baharu. Cincangan badan dikira daripada bait badan mentah, manakala pengekodan berkanun menjadikan struktur bertandatangan dan wayar tidak samar.

Kami menulis pengekod CBOR dengan tangan untuk pelaksanaan klien dan pelayan kami daripada bergantung pada perpustakaan pensirilan generik — keperluannya ialah ketepatan, bukan ergonomik, dan ujian harta berjalan dalam kedua-dua pelaksanaan untuk mengesahkan ia bersetuju.

Ujian regresi menegaskan format wayar berkanun tidak mengandungi urutan bait berjenama qub melebihi kunci medan qub_id primitif protokol. Format wayar adalah sengaja agnostik jenama — mana-mana pembaca yang mematuhi (kami atau pihak ketiga) boleh merender mana-mana qub dari storan kekal, tidak kira penyebaran mana yang memeteraikannya. Ujian ialah penanda kepelangan yang mencegah perubahan masa depan daripada secara tidak sengaja membakar rujukan jenama ke dalam bait yang, sebaik sahaja dalam storan kekal, tidak boleh ditulis semula.

3.4 Pencincangan Badan dan Integriti Pra-Pendedahan

Setiap muatan dimeterai membawa cincangan SHA3-256 bait badan mentahnya. Cincangan terikat kepada qub_id dan, apabila penandatanganan kepengarangan didayakan, kepada input tandatangan V2. Pembaca mengiranya semula selepas penyahsulitan dan menolak ketidakpadanan.

Pengecam kandungan 32-bait qub_id diterbitkan daripada praimej 108-bait yang merangkumi versi protokol, jenis kandungan, cap masa cipta dan buka kunci, cap masa keputusan pilihan (atau sentinel sifarnya), pusingan drand sasaran, cincangan badan, dan SHA3-256 tajuk pilihan yang dinormalkan kepada NFC. Gateway atau CDN tidak boleh mengubah mana-mana medan terikat secara konsisten dan masih melepasi penerbitan semula. Tajuk dihadkan kepada 100 titik kod NFC dan ditolak jika mengandungi kelas titik kod bermusuhan/kawalan yang dikongsi (termasuk penggantian arah bidi, aksara lebar sifar, blok tag, BOM, C0, C1, dan DEL).

3.5 Penandatanganan (ML-DSA-65)

Penandatanganan kepengarangan menggunakan ML-DSA-65 (FIPS 204), skema tandatangan pasca-kuantum standard NIST. Kami dengan sengaja memilih primitif pasca-kuantum untuk penandatanganan kerana kandungan dimeterai adalah kekal: tandatangan yang mengesahkan hari ini mesti masih mengesahkan beberapa dekad dari sekarang, termasuk selepas komputer kuantum berskala besar menjadi praktikal.

Kunci penandatanganan dijana dalam pelayar. Rahsia tempatan dibungkus di bawah kunci WebCrypto yang tidak boleh diekstrak sebelum disimpan dalam IndexedDB. Jika ciri pemulihan merentas peranti berskop akaun digunakan, blob kunci mudah alih yang disulitkan AEAD disimpan di sisi pelayan; teks sifer kunci rahsianya terikat kepada id akaun yang tidak berubah, dan perkhidmatan mengesahkan sampul awam tetapi tidak boleh menyahsulit bahan rahsia. Bait kunci peribadi mentah tidak dihantar kepada pelayan. Kunci awam dan rekod atestasi disimpan untuk pengesahan serta paparan identiti.

Penyahsulitan tlock dalam pelayar yang sama terpakai di dalam sematan qub: apabila qub yang dimeterai dirender melalui <qub-embed> pada halaman pihak ketiga, penyahsulitan masih berlaku dalam iframe sematan dalam pelayar pembaca. Sematan tidak mengubah model kepercayaan — teks biasa tidak pernah dinyahsulit pada pelayan qub.

3.6 Atribusi Awam — Pilih Masuk

qub yang dimeterai tidak membawa penunjuk pada rantaian kepada penciptanya kecuali pencipta memilih secara eksplisit untuk melampirkan satu. Apabila anda memeterai qub, aplikasi rujukan mengeluarkan tag storan Author (cap jari heksadesimal 64 aksara kunci awam penandatanganan anda) hanya apabila "Atribusi awam" diaktifkan pada langkah pemilih tarikh. Dengan togol dimatikan — lalai — tiada tag Author ditulis dan qub tidak diatribusi dalam storan kekal: tiada apa-apa dalam storan yang memautkan muat naik kepada handle anda, emel anda, atau qub anda yang lain. Dengan togol dihidupkan, cap jari diselesaikan kepada @handle anda melalui rantaian atestasi dalam §6.3 / §10 dan hitung mundur pembaca menunjukkan "Dimeterai oleh @{handle}" sebelum pendedahan.

Ini adalah perlindungan sengaja terhadap risiko pengenumerasi yang tag Author sentiasa-aktif akan cipta: pihak ketiga yang mempelajari cap jari pencipta sebaliknya boleh menggeledah storan kekal dengan tag dan membina semula keluaran sejarah penuh pencipta itu. Atribusi pilih masuk menutup saluran tersebut — hanya qub yang pencipta dengan eksplisit pilih untuk diatribusi muncul di bawah cap jari dalam storan kekal.

Halaman profil /u/{handle} ialah kad identiti-disahkan — handle, nama paparan + URL pilihan, pil "emel disahkan" (tiada alamat), dan bentuk pendek cap jari kriptografi. Ia tidak menyenaraikan qub pencipta. Pengunjung yang ingin melihat qub tertentu daripada pencipta mengikuti URL penghantaran qub itu secara langsung.

3.7 Pembalut Penyulitan Luar

Walaupun selepas penyahsulitan kunci masa menjadi mungkin secara matematik—sebaik sahaja tandatangan drand bagi pusingan terikat diterbitkan—lapisan kunci masa berkanun sahaja akan membolehkan pengindeks menyahsulit qub yang boleh ditemui secara pukal. Penghantaran peribadi menutup saluran itu dengan lapisan simetri tambahan di sekeliling bait disulitkan kunci masa (Protokol §13). Penghantaran awam sengaja meninggalkan pembungkus supaya pautan pemberitahuan, sematan, dan penemuan boleh berfungsi tanpa fragmen rahsia.

Pembalut menggunakan AES-256-GCM, sifer disahkan standard NIST, dengan kunci 256-bit K baharu yang dijana per qub oleh CSPRNG pelayar anda. K terikat kepada qub_id qub sebagai data tambahan disahkan, jadi kunci dari satu qub tidak boleh diguna semula untuk menyahsulit qub yang berbeza.

K tidak pernah sampai ke pelayan kami dalam aliran pelayar peribadi lalai. Ia dikodkan ke dalam fragmen URL pautan kongsi (https://qub.social/c/<tx_id>#<base64url(K)>). Pelayar tidak menghantar fragmen URL kepada pelayan—RFC 3986 meletakkan fragmen di luar permintaan—maka qub.social, gateway storan, CDN, dan pemantauan permintaan tidak dapat melihat K dalam aliran itu. OuterWrapper yang disimpan ialah CBOR berstruktur yang boleh dikenali, tetapi medan teks sifernya yang disahkan menyembunyikan struktur dalaman SealedQub dan tidak boleh dibuka tanpa K.

Akibat bersih:

Titik akhir /api/v1/seal sisi pelayan Worker (digunakan oleh agen AI dan pemanggil API lain) memerlukan pemanggil menjana K dengan CSPRNG, mengekalkannya secara tempatan, dan membekalkannya sebagai wrapper_key_b64url. Worker semestinya melihat kedua-dua teks biasa dan K dalam memori pada laluan yang dipercayai secara eksplisit ini, tetapi tidak mengekalkan kedua-duanya. Idempotency-Key yang wajib menghalang respons yang hilang daripada mencipta qub kedua yang dikenakan bil, manakala K yang dikekalkan pemanggil boleh digabungkan dengan URL tanpa-fragmen yang dimainkan semula. Ini berbeza daripada laluan pelayar lalai, di mana K tidak pernah sampai ke Worker melainkan pencipta secara eksplisit mendayakan pemulihan.


4. Pengangkutan dan Pinggir

4.1 TLS

Trafik pelayar ke qub disajikan melalui HTTPS di pinggir Cloudflare. Respons menetapkan HTTP Strict Transport Security (max-age=63072000; includeSubDomains; preload). Versi TLS dan suite sifer tepat yang dirundingkan dikawal oleh konfigurasi pinggir aktif dan bukannya ditegaskan oleh kod aplikasi. Kami tidak mendedahkan pelayan asal yang boleh dicapai secara berasingan.

4.2 Keselamatan Kandungan

Klien yang dikompilkan disajikan dengan header jenis kandungan dan cache yang ketat. Shell SPA ialah satu asal. Kami tidak menyemat skrip pihak ketiga untuk analitik atau pengiklanan. Dua sentuhan pihak ketiga dalam produk kedua-duanya berskop sempit: aliran pembelian meninggalkan SPA sepenuhnya dengan pengalihan halaman penuh ke pembayaran yang dihoskan Stripe (https://checkout.stripe.com/…) — UI Stripe tidak pernah dilaksanakan dalam asal kami dan kami tidak pernah melihat data kad — dan aliran pemeteraian memuatkan widget Turnstile Cloudflare, alternatif CAPTCHA yang memelihara kerahsiaan yang Cloudflare render di dalam iframe sandboxnya sendiri. Tiada pihak boleh membaca seluruh halaman.

iframe sematan qub (disajikan dari qub.social/embed/{tx_id} dan dimuatkan ke laman pihak ketiga oleh embed.js) membawa Content-Security-Policynya sendiri. Senarai izin connect-srcnya ialah 'self', https://qub.social, https://arweave.net, https://ar-io.dev, https://permagate.io, https://api.drand.sh, dan https://drand.cloudflare.com. iframe berjalan dengan sandbox="allow-scripts allow-top-navigation-by-user-activation" (bukan allow-same-origin): halaman hos tidak boleh membaca DOMnya, dan ia tidak boleh menavigasi hos kecuali selepas tindakan pengguna.

4.3 CORS dan Skop Ambil

Klien pelayar membuat permintaan ambil hanya kepada:

Destinasi sematan dikuatkuasakan oleh CSPnya. Destinasi yang dimaksudkan bagi SPA utama ditetapkan dalam kod dan konfigurasi serta diuji oleh semakan pelayar dan integrasi; Subresource Integrity bukan kawalan destinasi rangkaian.

Sematan mengambil bait tersimpan melalui asal qub/storan dalam senarai izin, menyahbungkus muatan peribadi dalam pelayar menggunakan K daripada fragmen URLnya, dan mengambil tandatangan pusingan masa pendedahan daripada dua asal drand yang dibenarkan. SPA utama menggunakan set sandaran empat titik akhir dalam config/drand-endpoints.json (drand.cloudflare.com, api.drand.sh, api2.drand.sh, dan api3.drand.sh) supaya gangguan satu titik akhir tidak menghalang pendedahan. CSP sematan menolak sambungan di luar senarai nyatanya.


5. Infrastruktur Sisi Pelayan

5.1 Pinggir Serverless

API kami berjalan sepenuhnya pada runtime serverless terurus di pinggir. Tiada VM, tiada bekas, dan tiada proses pelayan berterusan yang kami pentadbir. Ini secara dramatik mengurangkan permukaan serangan yang kami bertanggungjawab: kami tidak menjalankan OS, pelayan web, atau runtime aplikasi yang kami mesti tampal.

Middleware CORS awam yang berasingan digunakan Access-Control-Allow-Origin: * kepada set laluan yang dilaksanakan berikut: /embed.js, /embed/v1.js, segala-galanya di bawah /embed/; /api/v1/telemetry; /api/v1/openapi.json; segala-galanya di bawah /api/v1/qub/ (termasuk bait, metadata, bukti, penglibatan, notifikasi, dan subrute push); segala-galanya di bawah /api/v1/log/; pengendalian awam carian di bawah /api/v1/handle/; dan avatar awam membaca di bawah /api/v1/identity/avatar/. Permit preflightnya GET, POST, dan OPTIONS dengan Content-Type header permintaan. Permukaan berasaskan awalan ini lebih luas daripada hanya panggilan yang dibuat oleh embed pada masa ini, jadi setiap pengendali di bawah awalan tersebut mesti terus menguatkuasakan pengesahan, pengesahan identiti, had kadar, dan kawalan penyalahgunaan sendiri. Laluan API lain mengekalkan polisi CORS qub.social-terhad.

5.2 Storan

Aliran mesej pelayar lalai tidak menyimpan teks biasa pada infrastruktur qub. Builder /api/v1/seal mengendalikan teks biasa dan K dalam memori tetapi tidak menyimpan kedua-duanya. Pementasan perjanjian semestinya menyimpan perjanjian berstruktur bertandatangan sehingga ia ditandatangani bersama, ditarik balik, atau tamat tempoh. Pemulihan pilih masuk menyimpan keupayaan penghantaran (pautan penuh yang mengandungi fragmen) supaya ia boleh dipulihkan kemudian. Oleh itu, kami tidak menggambarkan seluruh peringkat storan sebagai “metadata sahaja.”

5.3 Rahsia

Rahsia (dompet penandatanganan, token pembekal, dan kunci HMAC) dibekalkan melalui pengikatan rahsia/persekitaran platform dan bukannya kawalan sumber. Komponen runtime hanya menerima pengikatan yang diperlukannya. Prosedur putaran dan pertindihan adalah khusus komponen; kami tidak mendakwa satu mekanisme putaran automatik atau teraudit yang universal.

5.4 Pengelogan dan Telemetri

Log JSON berstruktur ditulis pada setiap permintaan API dengan ID korelasi didedahkan dalam header respons X-Request-Id. Telemetri klien adalah tanpa nama — tiada pengecam peranti, tiada alamat IP, tiada pratonton kandungan. Peristiwa ditampung dalam ingatan dan dilepaskan atas dasar usaha terbaik; pelepasan yang gagal dibuang, tidak dicuba semula. Telemetri direka untuk boleh dilumpuhkan pada lapisan rangkaian tanpa menjejaskan produk.


6. Pengesahan

6.1 Daftar Masuk Pautan Magik

Daftar masuk menggunakan token guna sekali yang ditandatangani HMAC dan dihantar ke peti masuk e-mel anda. Pautan sah selama 15 minit dan penebusan dituntut secara atom supaya penggunaan serentak atau ulangan gagal secara tertutup. Selepas berjaya, pelayar menerima kuki legap __Host-qub_session dengan atribut Secure, HttpOnly, SameSite=Strict, dan Path=/.

Sesi mempunyai had melahu 30 hari dan had mutlak 90 hari, berputar selepas 24 jam, dan hanya menerima generasi sebelumnya yang segera untuk tempoh tenggang respons hilang selama 120 saat. Mutasi akaun sensitif memerlukan pengesahan dalam 10 minit sebelumnya. Rahsia penandatanganan HMAC ialah pengikatan platform; bacaan metadata sahaja tidak dengan sendirinya membolehkan token sah dicipta.

6.2 Kunci API (Tier Pembangun)

Kunci API pembangun menggunakan awalan qub_sk_ untuk pengecaman dan kebolehgrepan mudah. Setiap kunci:

Titik akhir pengurusan kunci pentadbir dijaga di belakang kelayakan pentadbir berasingan.

6.3 Atestasi Emel (Penandatanganan Kepengarangan)

Mengikat alamat emel kepada kunci penandatanganan memerlukan:

  1. Pemilikan kunci penandatanganan peribadi (anda menandatangani cabaran)
  2. Pemilikan peti masuk emel (anda memasukkan kod 6 digit yang dihantar melalui emel)

Salah satu sahaja tidak mencukupi. Pembatalan ialah rekod ditandatangani pada akaun anda sendiri dan berkuat kuasa dengan serta-merta; pembaca yang mengambil atestasi melihat keadaan dibatalkan dan paparkan dengan sewajarnya.


7. Pembayaran

Kemasukan kad dan pemprosesan berjalan dalam pembayaran yang dihoskan Stripe. Kami tidak pernah menerima nombor kad, tarikh luput, atau CVC. Kami menyimpan pengecam pelanggan dan langganan Stripe, keadaan langganan, serta data tempoh pada rekod kelayakan/kunci API supaya akses, pembaharuan, pemeteran, pembatalan, dan bayaran balik boleh diselaraskan. Pernyataan kerahsiaan dan keselamatan Stripe mengawal pengendalian data pembayaran tersebut.

Titik akhir pemeteraian merentas-semak rekod kelayakan terhadap pengecam peranti dan, untuk pengguna yang mendaftar masuk, terhadap identiti yang dipautkan. Kelayakan tidak boleh diguna semula merentas peranti tanpa pengguna secara eksplisit memulihkannya melalui daftar masuk pautan magik.


8. Rintangan Penyalahgunaan

8.1 Pengesanan Bot

Aliran pemeteraian dijaga oleh alternatif CAPTCHA yang memelihara kerahsiaan yang tidak menggunakan kuki untuk penjejakan dan tidak menjadikan cap jari untuk pengiklanan. Cabaran yang gagal ditolak oleh Worker pinggir kami sebelum sebarang pemprosesan sisi pemeteraian berlaku.

8.2 Pengehadan Kadar

Had kadar dikuatkuasakan pada beberapa lapisan:

Kaunter dan tuntutan atom diedarkan merentas KV, Durable Objects, dan pengikatan had kadar platform mengikut keperluan ketekalan endpoint. Permintaan yang dihadkan kadar mengembalikan 429; endpoint yang boleh mengira tetingkap cuba semula menyertakan Retry-After.

8.3 Penyederhanaan Kandungan

Laluan muat naik pelayar lalai tidak dapat mengimbas badan: ia hanya menerima artifak yang disegel oleh klien. Pembina /api/v1/seal laluan melihat teks jelas secara sementara, dan peringkat perjanjian memegang terma berstruktur sehingga pemeteraian, tetapi pengecualian kepercayaan itu tidak menukar laluan muat naik biasa yang buta bait menjadi pengimbas kandungan. Moderasi operasi adalah satu senarai tolak di lapisan penonton: qub yang disenarai hitam ditolak oleh penonton kami tanpa mengira sama ada muatan yang disimpan masih boleh dicapai. Penyediaan senarai larangan tidak menarik balik bait tahan lama, entri log ketelusan, atau data rangkaian kekal yang telah diterbitkan.

Laporan penyalahgunaan dihadkan kadar menggunakan cincangan sehala IP pelapor; kami tidak menyimpan IP dalam bentuk jelas untuk tujuan ini.


9. Rantaian Bekalan dan Integriti Binaan

9.1 Penyematan Rantaian Alat

Versi pengkompil dan runtime disematkan dalam konfigurasi repositori dan kebergantungan diselesaikan melalui fail kunci yang dikomited. CI menyemak kesegaran fail terjana dan invarian sensitif kebolehulangan. Kami tidak membuat dakwaan lebih kuat bahawa setiap binaan bersih adalah sama bait demi bait pada semua mesin yang disokong.

9.2 Lint dan Analisis Statik

Workspace mengaktifkan kumpulan lint terketat kami pada tahap deny. CI menganggap setiap amaran — termasuk amaran pautan dokumentasi — sebagai kegagalan binaan. Ini adalah sengaja: kami menggunakan ketegasan lint sebagai penanda kepelangan untuk regresi halus.

9.3 Pintu CI

Aliran kerja CI meliputi pemformatan dan lint ketat; ujian Rust, WASM/pelayar, Worker, sematan, dan API; semakan jenis; liputan kod; semakan mutasi/invarian; analisis statik kebergantungan dan aliran kerja; semakan kunci, liputan, hanyutan, dan titik kod bermusuhan i18n; kesegaran dokumentasi/API/pangkalan pengetahuan terjana; inventori dokumen dan semakan pautan dalaman; belanjawan helaian gaya dan bundle; serta pengesahan OpenAPI. Sesetengah kerja mutasi yang mahal dijadualkan dan bukannya dijalankan pada setiap tolakan.

Satu rangkuman ci yang diperlukan kekal merah jika mana-mana kerja diperlukan gagal. Aliran kerja cawangan dilindungi dan penyebaran menggunakan keputusan itu dan bukannya menggandakan pintu keselamatan yang lebih kecil.

9.4 Ujian Mutasi

Kerja mingguan menjalankan ujian mutasi terhadap modul tulen kritikal keselamatan: pencincangan, CBOR berkanun, pemeteraian, buka kunci, newtype format wayar, pengesahan jenis protokol, dan ruang nama handle. Ujian mutasi menjawab "adakah suite ujian kami menangkap kod yang salah dengan halus?" — jika pelaksanaan yang dimutasi masih lulus semua ujian, kami tahu kami mempunyai jurang liputan ujian dan menanganinya.

9.5 Hook Git

Hook tempatan (pre-commit, pre-push) mencerminkan pintu CI supaya regresi ditangkap sebelum meninggalkan mesin pembangun. Hook dipasang melalui skrip repo; ia tidak dipintas dalam aliran kerja kami dan CI ialah pintu berwibawa jika ia dilangkau.


10. Pengujian

Kod kritikal keselamatan membawa tiga jenis ujian:


11. Higien Cawangan dan Pengeluaran

Cawangan ciri hanya memajukan staging melalui pull request Pintu 1: ci diperlukan berwarna hijau, tiada permintaan perubahan yang belum diselesaikan, tiada konflik gabungan, dan pokok semakan yang bersih; gabungan menggunakan squash dan cawangan dipadam. main hanya maju melalui pull request Pintu 2 staging → main dan mengekalkan keturunan dengan commit gabungan. Tolakan terus ke cawangan bukan aliran kerja keluaran.

Penyebaran persediaan dan pengeluaran dicetuskan daripada keadaan cawangan staging dan main yang dilindungi selepas CI. Kod pull request dan kelayakan fork tidak menerima rahsia penyebaran.

Rahsia yang digunakan dalam aliran kerja penyebaran diskopkan kepada persekitaran penyebaran oleh platform CI kami. Ia tidak tersedia kepada aliran kerja pull-request daripada forks.


12. Pendedahan Diselaras

Jika anda percaya anda telah menemui kerentanan keselamatan dalam qub, kami ingin mendengarnya dengan cepat dan kami komited mengendalikan laporan secara profesional.

Kami mengakui penerimaan dalam tempoh tiga hari bekerja dan terus memberitahu anda apabila kami menyiasat. Dengan persetujuan anda, kami menghargai pelapor dalam nota keluaran.

12.1 Safe Harbor

Jika penyelidikan anda mengikut peraturan di atas (siasatan suci hati, tiada bahaya kepada pengguna lain atau perkhidmatan, tetingkap pendedahan munasabah), kami tidak akan mengejar tindakan undang-undang terhadap anda, dan kami tidak akan meminta penguatkuasaan undang-undang untuk berbuat demikian. Kami menganggap kerja anda sebagai pengujian dibenarkan dan kami lebih suka anda menemui pepijat daripada orang lain.

Safe Harbor ini terpakai pada:

Ia tidak terpakai pada kejuruteraan sosial ahli pasukan qub, ujian penolakan perkhidmatan, atau mengakses data pengguna lain melebihi yang diperlukan untuk menunjukkan isu. Jika anda tidak pasti sama ada sesuatu berada dalam Safe Harbor, tanya dahulu menggunakan awalan subjek [SECURITY] yang sama.


13. Had Jujur

Keselamatan ialah amalan, bukan keadaan. Beberapa had wajar dinamakan secara langsung:


14. Perubahan Halaman Ini

Perubahan material dinyatakan dengan mengemas kini tarikh berkuat kuasa di bahagian atas. Apabila perubahan mencerminkan peningkatan keselamatan konkrit, kami menerangkannya secara ringkas dalam log perubahan awam. Apabila perubahan mencerminkan penjelasan polisi, kami menerangkan apa yang berubah dan mengapa.

Untuk soalan tentang apa-apa pada halaman ini, emel support@qub.social dengan awalan subjek [SECURITY].


15. Log Perubahan

Versi Tarikh berkuat kuasa Ringkasan
1.1 23 September 2026 Menyelaraskan dakwaan kriptografi, mod penghantaran, storan, CSP, sesi, kunci API, pembayaran, CI, dan aliran kerja keluaran dengan sistem yang dilaksanakan.
1.0 2 Mei 2026 Penerbitan awal.