Neoforce maakt gebruik van unieke URL’s om bestanden toegankelijk te maken. Deze URL’s bestaan uit twee delen:
- ID – het interne database-ID van het bestand.
- Nonce – een willekeurig gegenereerde tekenreeks die dient als beveiligingssleutel.
Voorbeeld:
https://[domein]/files/322-dTg92jKsk83nsAqW3QZl9rYpX6WfBtVu
In dit voorbeeld is 322
het database-ID en dTg92jKsk83nsAqW3QZl9rYpX6WfBtVu
de nonce.
Wat is een nonce?
Een nonce (number used once) is een willekeurige waarde die slechts één keer wordt uitgegeven en fungeert als geheim toegangsteken. Binnen Neoforce voorkomt de nonce dat onbevoegden toegang krijgen tot bestanden door enkel op ID’s te raden of door te proberen opeenvolgende ID’s te benaderen.
Generatie en entropie
Zoals je wellicht weet is het back-end van Neoforce geschreven in PHP. De nonces worden gegenereerd met de PHP-functie random_int()
, een cryptografisch veilige willekeurige generator (CSPRNG).
- Lengte: 32 tekens
- Karakterset: 62 mogelijke tekens (
a–z
,A–Z
,0–9
) - Totale entropie: ongeveer 190 bits
Wat betekent dit in de praktijk?
- 128 bits entropie wordt internationaal al gezien als veilig voor de komende decennia.
- Onze huidige 190 bits ligt daar ver boven.
Om dit tastbaar te maken:
- Stel dat een aanvaller 1 miljard pogingen per seconde zou kunnen doen.
- Dan duurt het gemiddeld 10.000.000.000.000.000.000.000.000.000.000 jaar (10^31 jaar) om één nonce correct te raden.
- Ter vergelijking: het universum is ongeveer 14 miljard jaar oud (14.000.000.000 jaar).
Daarbij komt dat het niet voldoende is om alleen de nonce te raden: ook het juiste database-ID moet bekend zijn. Dit maakt de kans op succes nog kleiner.
Raadbaarheid van de URL’s
De aanwezigheid van een nonce zorgt ervoor dat:
- Het database-ID weliswaar voorspelbaar kan zijn, maar zonder de juiste nonce niet bruikbaar is.
- De nonce zelf praktisch onraadbaar is vanwege de extreem hoge entropie.
- Het mechanisme vergelijkbaar is met “unlisted” links bij clouddiensten, maar met veel sterkere beveiliging door het gebruik van cryptografisch veilige random waarden.
Aanvullende maatregelen
- Logging: mislukte toegangsverzoeken worden vastgelegd.
- Rate limiting: herhaalde of geautomatiseerde pogingen worden door de server beperkt.
- Ontwerpkeuze: bestanden zijn alleen toegankelijk voor personen die de exacte URL bezitten. Dit is een bewuste functionele keuze.
Conclusie
Het gebruik van nonces in bestands-URL’s is een robuuste beveiligingsmaatregel.
- Met 190 bits entropie is brute force praktisch onmogelijk.
- Dit ligt ruim boven de internationaal geaccepteerde standaard van 128 bits.
- Indien gewenst kan de lengte van de nonce worden verhoogd naar 44 tekens, waarmee een entropie van 256 bits wordt bereikt (vergelijkbaar met AES-256).
Samengevat: de huidige implementatie biedt een zeer hoog beveiligingsniveau. Het raden van een nonce-URL zou miljarden-miljarden-miljarden keren langer duren dan de huidige leeftijd van het universum, zelfs als een aanvaller miljarden pogingen per seconde zou kunnen doen.
Alternatief: toegang alleen na inloggen
Het gebruik van nonces in bestands-URL’s kan worden uitgeschakeld. In dat geval zijn bestanden uitsluitend toegankelijk voor ingelogde gebruikers met de juiste rechten. Dit biedt een nog strikter beveiligingsniveau, omdat toegang tot bestanden altijd gekoppeld is aan authenticatie en autorisatie binnen Neoforce.
Nadelen
Het afdwingen van inloggen heeft functionele consequenties:
- Afbeeldingen in e-mails werken niet meer, omdat e-mailclients doorgaans geen inlogmogelijkheden ondersteunen.
- Voorbeeldweergaven van Office-documenten (zoals Word, Excel en PowerPoint) kunnen niet worden getoond, omdat externe systemen geen toegang krijgen tot de bestanden.
- Gebruikers zullen vaker foutmeldingen ervaren, bijvoorbeeld bij het openen van links of gedeelde bestanden buiten een actieve sessie.
Deze aanpak verhoogt de beveiliging, maar gaat ten koste van gebruiksgemak en functionaliteit.
Instellen via beheer
Wil je afdwingen dat gebruikers altijd ingelogd moeten zijn? Hieronder lees je hoe je dit instelt:
- Klik rechtsboven op je naam en kies voor 'Beheer'
- Ga nu naar de pagina 'Beveiliging'
- Vink de volgende optie aan en klik vervolgens op [Opslaan]; Forceer het controleren van autorisaties bij het openen van bestanden.