Tietoturva

Tietoturvamallimme yhdessä lauseessa: palvelimella ei ole mitään hyökkättävää. Kaiken alla olevan voi falsifioida DevTools-työkalullasi.

Arkkitehtuuri

Generaattori on staattinen yhden sivun sovellus, jota tarjoillaan Cloudflare Pages -palvelusta: ei käyttäjätilejä, ei todennusta eikä taustajärjestelmän koodipolkua missään kohtaa generointiketjua. Kaikki QR-koodin luomis-, koodaus-, skannaus- ja renderöintitoiminnot suoritetaan kokonaan selaimessasi. Yksi pieni serveritön päätepiste on sen vieressä ja se luetellaan tässä piilottamisen sijaan: /api/contact (yhteydenottolomake, joka tallentaa lähettämäsi sisällön Cloudflare D1:een ja lähettää sen meille sähköpostitse). Sitä ei kutsuta, kun luot QR-koodia; URL-turvallisuustarkistin on erillinen tuote osoitteessa check.qr.abundera.ai. Tarkista, onko QR-koodi turvallinen

Uhkamalli

Koska generaattori ei kerää, tallenna tai siirrä käyttäjätietoja (yllä olevat kaksi päätepistettä käsittelevät vain sen, minkä nimenomaisesti lähetät niille), yleisimmät web-sovellusten uhat — tunnistetietojen varastaminen, tietokantamurto, istunnon kaappaaminen, palvelinpuolen injektio — eivät koske sitä. Jäljelle jäävä hyökkäyspinta on staattinen resurssipaketti (HTML, CSS, JavaScript), jota tarjoillaan lähteestämme. Suunnittelemme olettaen:

Content Security Policy — direktiiveittäin

Alla oleva käytäntö luetaan julkaistusta _headers-tiedostosta tämän sivun rakennushetkellä, joten se ei voi ajautua eroon siitä, mitä reuna lähettää. Vahvista se minkä tahansa pyynnön vastausotsakkeista.

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'

Mitä kukin direktiivi sallii meidän tehdä ja missä se tekee myönnytyksiä:

Mitä CSP ei pysty tekemään

CSP rajoittaa, mistä selain lataa koodia. Se ei tarkista, mitä ladattu koodi tekee. Jos alkuperämme vaarantuisi, uhkamallin ensimmäinen kohta, hyökkääjän skripti suoritettaisiin samoilla oikeuksilla kuin omamme, mukaan lukien yllä olevat connect-src- ja img-src-myönnytykset. Puolustuksemme sitä vastaan sijaitsevat CSP:n yläpuolella: julkaisut kulkevat yhden Cloudflare-tilin kautta rajatuilla tokeneilla, resurssien tiedostonimet ovat sisältöhajautettuja, joten vaihdettu tiedosto muuttaa jokaisen siihen viittaavan URL:n, ja service worker tallentaa välimuistiin vain same-origin-GET-vastaukset. Manifesti kuvaa sivuston sellaisena kuin se toimitetaan. Se ei ole väite, ettei mikään verkkosivu voisi koskaan lähettää tietoa minnekään, ja pidämme parempana, että pidät meidät vastuussa suppeammasta, tarkistettavissa olevasta väitteestä.

Eri CSP-käytännöt koskevat /bio/*-polkua (lievennetty img-src käyttäjän toimittamille avatarille) ja /embed/*-polkua (lievennetty frame-ancestors tarkoituksellista upotusta varten). Molemmat on dokumentoitu tiedostossa site/_headers.

Liikenne + kehystys-otsakkeet

Service worker

Service workerimme (site/sw.js) tallentaa välimuistiin vain same-origin-resursseja. Fetch-käsittelijä hylkää eksplisiittisesti cross-origin-pyynnöt ja muut kuin GET-metodit — voit lukea logiikan tiedostosta /sw.js (lähdekoodi toimitetaan riittävän lukukelpoisena, jotta sitä voi seurata). Välimuistikirjoitukset on kääritty event.waitUntil():iin, jotta niitä ei voi keskeyttää kesken navigoinnin.

Syötteen sanitointi

Kaikki käyttäjän syötteen hyväksyvät renderöintipolut käsittelevät sen epäluotettavana tekstinä:

Cross-origin-kuvien hakeminen

Kun käyttäjä liittää https:-URL:n vCard-kuvana tai logona, selain hakee sen CORSin ja CSP:n img-src-sallittujen listan alaisena. Kuva renderöidään canvakseen. Se ei koskaan muutu eläväksi DOM:iksi, ei koskaan suorita koodina eikä koskaan saavuta lähdettämme — haku on selain → etäkuva, ja tulos maalataan asiakaspuolella. Hyökkääjä, joka hallitsee etäkuva-URL:a, voi seurata, että URL ladattiin (lokimerkintä heidän omalla palvelimellaan), mutta ei voi suodattaa mitään sivultamme.

Subresource Integrity (SRI)

Kaikki toimittamamme JavaScript ja CSS on same-origin. Emme lataa kolmannen osapuolen skriptejä tai tyylitaulukoita, joten SRI-hashit eivät ole sovellettavissa. Jos koskaan lataamme kolmannen osapuolen resurssin, lisäämme siihen SRI integrity-attribuutin ja dokumentoimme hash-päivitysprosessin tällä sivulla.

Haavoittuvuuden ilmoittaminen

Jos löydät Abundera QR:ään vaikuttavan tietoturvaongelman — olipa se koodissamme, käyttöönotossamme tai toimittamassamme riippuvuudessa — ilmoita siitä yksityisesti osoitteeseen security@abundera.ai. Tavoitteemme on luokitella ongelma 72 tunnin sisällä. Voit myös ottaa meihin yhteyttä tiedostossa /.well-known/security.txt olevien yhteystietojen kautta.

Ei bug bounty -ohjelmaa (vielä)

Emme tällä hetkellä tarjoa maksullisia palkkioita, mutta jokainen vahvistettu pätevä raportti saa maininnan muutoslokissa ja julkisen kiitoksemme.

Tarkista kaikki yllä oleva

Jokaisen tällä sivulla esitetyn väitteen voi falsifioida selaimesi DevTools-työkalulla ilman, että sinun tarvitsee luottaa meihin:

Yhteystiedot

Tietoturvan paljastukset: security@abundera.ai

Viimeksi päivitetty: 2026-09-03. Seuraava tarkistus: 2026-12-03.