Beveiliging
Laatst bijgewerkt op 18 september 2026
In het kort
Geen keurmerken, geen vage geruststelling. Dit is wat er staat en hoe het werkt.
- Je wachtwoord wordt gehasht met argon2id. Wij kennen het niet en kunnen het niet uitlezen.
- Al het verkeer tussen de app en de server is versleuteld met TLS.
- Elke nacht een back-up die meteen wordt teruggelezen om te controleren of hij klopt.
- Alles staat en blijft binnen de EU.
- Geen analytics-pakket, geen trackers, geen advertentiecode in de app.
- Weergaven van openbare lijsten worden geteld, met een token dat niet naar een persoon te herleiden is. Zie de privacyverklaring.
- Geen wachtwoorden in leesbare vorm, nergens, ook niet in logs.
- Geen gegevens naar landen buiten de EU.
- Geen beloftes die we niet kunnen waarmaken. Onderaan staat wat we níet claimen.
Je wachtwoord
We slaan je wachtwoord niet op. Wat er in de database staat is een hash die is gemaakt met argon2id, op de instellingen die OWASP aanraadt: 19 MiB geheugen en twee rondes. Argon2id is expres traag en geheugenhongerig, zodat iemand die de database zou buitmaken er niet doorheen kan rekenen.
Praktisch betekent dat: wij kunnen je wachtwoord niet uitlezen, niet aan je opsturen en niet aan iemand anders geven. Vergeten? Dan zetten we een nieuwe, we kunnen de oude niet opzoeken.
De controle op gelekte wachtwoorden
Kies je een wachtwoord, dan controleren we of het in een bekend datalek voorkomt. Dat gebeurt zonder je wachtwoord ergens naartoe te sturen.
Het werkt zo: van je wachtwoord wordt lokaal een hash gemaakt en daarvan sturen we alleen de eerste vijf tekens naar de dienst die de lekken bijhoudt. Die stuurt alle hashes terug die met die vijf tekens beginnen, honderden, en het vergelijken gebeurt op onze server. De andere kant weet dus nooit welk wachtwoord het was, en zelfs niet of er een treffer was.
Doet die dienst het even niet, dan gaat je registratie gewoon door. Een storing bij een ander mag niet betekenen dat jij geen account kunt maken.
Onderweg
Al het verkeer tussen de app en de server gaat over TLS. Er is geen onversleutelde variant om op terug te vallen; een verzoek over gewoon HTTP wordt doorgestuurd naar de versleutelde versie voordat er iets van inhoud over de lijn gaat.
Inloggen en ingelogd blijven
Je blijft ingelogd met twee soorten tokens: een kortlevende om verzoeken mee te doen en een langlevende om die eerste mee te vernieuwen. Die tweede wordt bij elk gebruik vervangen. Wordt een verbruikt token nog een keer aangeboden, wat niet per ongeluk kan gebeuren, dan behandelen we dat als diefstal en beëindigen we alle sessies van dat account tegelijk.
Bij elk verzoek wordt bovendien opnieuw in de database gekeken of het account nog bestaat. Daardoor werkt het verwijderen van een account direct, en niet pas als het laatste token vanzelf verloopt.
Wie bij wat kan
De database scheidt per gebruiker. Elk bier, elke partij en elke groep hangt aan één account, en de app vraagt nooit iets op zonder dat account erbij. Een gedeelde verzameling of een ruil is een expliciete uitzondering die jij zelf aanzet, en die geeft alleen toegang tot wat je deelt.
De catalogus is het enige wat iedereen ziet, en dat is de bedoeling: het gaat om feiten over bieren, niet over mensen.
Misbruik tegenhouden
Op inloggen, registreren, wachtwoordherstel en het versturen van mail zitten limieten per adres en per IP. Die zijn er om te voorkomen dat iemand wachtwoorden kan raden of een mailbox kan volgooien. Een geweigerd verzoek zegt niet wélke limiet is geraakt, want dat zou zelf weer informatie prijsgeven.
Verder zegt geen enkel antwoord van de server of een e-mailadres een account heeft. Registreren met een bestaand adres geeft precies hetzelfde antwoord als registreren met een nieuw adres. Het verschil staat alleen in de mailbox van de persoon die het mag weten.
Back-ups
Elke nacht wordt de database gedumpt en daarna meteen teruggelezen om te controleren of de dump bruikbaar is. Een back-up waarvan niemand weet of hij werkt is geen back-up. We bewaren veertien dagelijkse en twaalf maandelijkse kopieën, en de herstelprocedure is een keer echt uitgevoerd tegen een aparte database.
Waar het staat
De server en de mail staan binnen de Europese Unie en vallen onder de AVG. Er gaan geen gegevens naar landen daarbuiten.
Openbare lijsten zijn openbaar
Een lijst met een openbare code is bedoeld om gevonden te worden. Hij heeft een eigen adres, staat in de gids en is vindbaar via zoekmachines. Er is geen tweede schakelaar die een openbare lijst ongelijst maakt: publiceren is de beslissing, en de code weghalen in de app is hoe je het terugdraait.
Dat is een verandering. De deelpagina had noindex en de code stond in het
deel van de URL dat nooit een server bereikt. Allebei waren ze er om een openbare pagina
moeilijk vindbaar te maken, en een gids is daar het tegenovergestelde van.
Twee dingen zijn behouden nu de code in het adres staat, omdat ze de link beschermen in plaats van de pagina te verbergen:
- De code komt niet in ons logboek. Verzoeken aan een deelpagina
worden gelogd als
/share/[redacted], en de verwijzende pagina wordt weggelaten, zodat een link die je aan één persoon geeft niet in een bestand belandt. - De pagina stuurt geen referrer. Klik je op een link in een gedeelde lijst, dan hoort die site niet van welke lijst je kwam.
Privé delen verandert hier niets door. Een uitnodigingscode is geen openbare code: die lijsten staan niet in de gids, worden niet geïndexeerd en zijn alleen bereikbaar voor wie jij hebt uitgenodigd.
Wat een openbare pagina laat zien
Wat de eigenaar heeft gedeeld: de naam van de lijst, de weergavenaam en de bieren op de plekken die zijn gekozen. Niet het e-mailadres, niet het account, en niets wat niet in die lijst is gezet.
Staat er iets op een openbare pagina dat er niet hoort, dan staat er een meldknop op de pagina zelf. Daar is geen account voor nodig en er wordt niets over jou bewaard.
Wat we hiermee niet claimen
Eerlijk is eerlijk. Dit zijn de dingen die hierboven níet worden beweerd, zodat je ze niet hoeft te veronderstellen:
- Je verzameling is niet end-to-end versleuteld. Ze staat versleuteld op de schijf en gaat versleuteld over de lijn, maar op de server is ze leesbaar, want anders zou synchroniseren tussen je apparaten niet kunnen werken. Wie de server beheert, kan er technisch bij. Dat zijn wij, en we doen het niet, maar "we doen het niet" is een belofte en geen wiskunde.
- De back-ups staan op dezelfde machine als de database. Ze beschermen tegen een fout van ons; ze beschermen nog niet tegen het verlies van de hele machine. Een kopie buiten de deur staat op de lijst en is er nog niet.
- Er is geen externe audit geweest. Niemand van buiten heeft dit nagekeken. Wat hier staat is te controleren, niet gecertificeerd.
- BackBeer is jong. De app is nog niet uit alfa. Dat is precies de reden om nu op te schrijven hoe het werkt, in plaats van later.
Iets gevonden?
Zie je een gat, mail dan cheers@back.beer. Meld het aan ons voordat je het elders deelt, geef ons de kans het te repareren, en haal geen gegevens van anderen op om je punt te maken. We reageren, we nemen het serieus, en we zeggen erbij wat we ermee hebben gedaan.
Deze pagina is opgesteld in het Nederlands. De Engelse versie is een vertaling ter informatie. Wijken ze van elkaar af, dan geldt de Nederlandse tekst.