Beveiliging en gegevensbescherming
Je vertrouwt ons de namen, e-mailadressen en toetsresultaten van je cursisten toe. Deze pagina legt uit hoe die beschermd zijn, wat er precies wordt vastgelegd en hoe je het weer meeneemt.
De belangrijkste regel zit in de code, niet in een beleidsstuk
Leermanager is een systeem waarin meerdere cursusaanbieders naast elkaar werken. De vraag die daarbij hoort is: hoe weet je zeker dat de een de gegevens van de ander nooit ziet?
Het antwoord is dat elke vraag naar de database expliciet op de organisatie filtert. Er is geen automatische laag die dat achter de schermen toevoegt, en dat is een bewuste keuze: zo'n laag verbergt wat er gebeurt, en verborgen beveiliging is beveiliging die je niet kunt nakijken.
Loopt er iets mis, dan is het antwoord 404 in plaats van 403. Een 403 zou bevestigen dat er iets bestaat dat je niet mag zien, en dan is de foutmelding zelf een manier om te achterhalen welke cursussen er elders bestaan.
Wachtwoorden en sessies
Wachtwoorden worden gehasht met scrypt
Niet versleuteld maar gehasht: er is geen sleutel waarmee ze terug te rekenen zijn, ook niet door ons. Wij kunnen je wachtwoord dus niet opzoeken en niet aan je doorgeven — alleen een herstellink sturen.
Zwakke wachtwoorden worden geweigerd
Naast een minimumlengte wordt gecontroleerd op het voor de hand liggende: je eigen e-mailadres, en het woord 'wachtwoord' zelf. Dat irriteert één keer en voorkomt het account dat als eerste geraden wordt.
Sessietokens staan alleen als HMAC in de database
Het token dat in je browser staat, staat niet in de database. Wat er staat is een afgeleide waarde. Een gestolen databasekopie levert daarmee geen werkende sessies op.
Je ziet je eigen sessies en kunt ze intrekken
Per apparaat met browser en tijdstip van laatste gebruik. Een sessie is 30 dagen geldig; vermoed je dat iemand meekijkt, dan beëindig je hem zelf.
Links die verlopen, en waarom dat geen pesterij is
Een uitnodigingslink is een sleutel tot een account: wie hem heeft, kan een wachtwoord kiezen. Zo'n link blijft daarom niet eeuwig geldig, want dan blijft hij ook eeuwig in een mailbox liggen waar iemand anders bij kan.
Uitnodigingen zijn 14 dagen geldig. Herstellinks voor wachtwoorden zijn korter geldig en werken één keer — is hij gebruikt, dan is hij weg. Ook deze links staan alleen gehasht in de database.
Wat er verder in zit
- Elke schrijfactie doorloopt vier controles: ben je ingelogd, mag je dit, past het binnen je plan, en is de invoer geldig
- Snelheidsbegrenzing op alles wat verstuurt: uitnodigen, herstel aanvragen, herinneringen, testmail
- Geen ruwe HTML in lesmateriaal, zodat invoer van een gebruiker nooit als code wordt uitgevoerd
- Verkeer via HTTPS, met een sessiecookie die alleen over een beveiligde verbinding wordt verstuurd
- Gegevens binnen de Europese Unie, bij een Europese hoster
- Demo-omgevingen worden na 24 uur volledig gewist, inclusief de accounts die erin zijn gemaakt
Wat er van een cursist wordt vastgelegd
Dit is de volledige lijst. Er is geen meting van muisbewegingen, leestijd per alinea of schermactiviteit tijdens een toets.
| Gegeven | Waarvoor | Wie ziet het |
|---|---|---|
| Naam en e-mailadres | Inloggen en het certificaat. | De cursusaanbieder en de cursist zelf. |
| Versleuteld wachtwoord | Inloggen. | Niemand; het is niet terug te rekenen. |
| Afgeronde lessen met tijdstip | Voortgang tonen en de cursus kunnen afronden. | De cursusaanbieder en de cursist zelf. |
| Toetspogingen met antwoorden en uitslag | Nakijken, uitslag berekenen, aantoonbaarheid. | De cursusaanbieder en de cursist zelf. |
| Laatste keer inloggen en browser per sessie | Zien wie stilligt, en je eigen sessies kunnen intrekken. | De cursusaanbieder ziet het tijdstip; de browser alleen de cursist zelf. |
Cursisten zien elkaars gegevens en resultaten nooit. Er zijn geen ranglijsten en geen groepsoverzichten voor cursisten.
Vragen hierover
Nee. Elke vraag naar de database filtert op de organisatie van de ingelogde gebruiker. Vraag je een cursus op die niet van jou is, dan is het antwoord 404 en niet 403 — anders zou de foutmelding zelf verklappen welke id's er elders bestaan.
Wachtwoorden staan er als scrypt-hash in en zijn niet terug te rekenen. Sessietokens staan er alleen als HMAC in, dus een kopie van de database geeft niemand toegang tot een lopende sessie. Uitnodigings- en herstellinks staan er ook alleen gehasht in.
Een sessie is 30 dagen geldig. Op de pagina Mijn account zie je op welke apparaten je bent ingelogd en wanneer die voor het laatst actief waren, en je kunt elke sessie afzonderlijk beëindigen.
Er is één cookie voor je sessie en een lokale voorkeur voor licht of donker thema. Kom je via een advertentie binnen, dan komt daar één cookie bij dat dertig dagen onthoudt wélke advertentie dat was — zodat wij weten of adverteren iets oplevert. Er staat geen nummer in dat jou herkent. Voor bezoekcijfers draait er Plausible op onze eigen server: dat zet geen enkele cookie en bewaart geen IP-adres. Geen Google Analytics, geen advertentienetwerken, geen cookies van andere partijen — en daarom ook geen cookiebanner die om toestemming vraagt.
Ja. Lessen en naslag staan in Markdown, een hele cursus is als bestand te exporteren, en cursisten en resultaten zijn als CSV te downloaden. Iedere gebruiker kan bovendien de eigen accountgegevens downloaden zonder het aan iemand te vragen.
Bij een lek dat gegevens van jouw cursisten raakt, informeren wij jou — jij bent verwerkingsverantwoordelijke en degene die het bij de Autoriteit Persoonsgegevens moet melden. Dat staat ook in de verwerkersovereenkomst.