Een offerteformulier waarop iemand een bouwtekening, een foto van een lekkende leiding of een pdf met specificaties kan meesturen: dat scheelt een hoop mailtjes over en weer. Voor installateurs, drukkers, hoveniers en adviesbureaus is het vaak de handigste verbetering die ze aan hun website kunnen doen.
Alleen: het uploadveld is ook het enige onderdeel van uw site waar een willekeurige bezoeker een bestand op uw server mag zetten. Wie een bestand laat uploaden via een formulier moet dat veilig inrichten, anders zet u letterlijk de achterdeur open. In dit artikel leest u wat er precies mis kan gaan, welke instellingen het verschil maken en wanneer u het veld beter weglaat.
Waarom een uploadveld anders is dan de rest van uw site
Alle andere velden in een formulier ontvangen tekst. Die tekst wordt opgeslagen of gemaild, en zolang uw formulierplugin fatsoenlijk is, gebeurt er verder niets mee. Een bestand is iets anders: dat blijft ergens staan, krijgt een adres op uw domein en kan onder ongelukkige omstandigheden door de server worden uitgevoerd in plaats van alleen bewaard.
Het klassieke scenario ziet er zo uit. Iemand uploadt een bestand dat eruitziet als een afbeelding, maar in werkelijkheid PHP-code bevat. Vervolgens zoekt hij het adres op waar dat bestand terechtkwam en roept het aan in zijn browser. Draait de server die code, dan heeft de aanvaller een beheersconsole binnen uw installatie. Vanaf dat moment maakt het niet meer uit hoe sterk uw wachtwoord was.
Dat klinkt gericht, maar het is bijna altijd geautomatiseerd. Scanners zoeken het hele internet af naar formulieren met een uploadveld en proberen er standaardbestanden doorheen te duwen. Uw site hoeft niet interessant te zijn; hij hoeft alleen bereikbaar te zijn.
Naast die ernstige variant is er een vervelender maar minder gevaarlijke: misbruik van uw opslag. Uw formulier wordt gebruikt om grote bestanden te parkeren, uw schijfruimte loopt vol en op een dinsdag zit uw site of uw mailbox aan de limiet.
Welke bestandstypen u wel en niet toelaat
De belangrijkste knop is de lijst met toegestane extensies. Bijna elke formulierplugin heeft die, en bijna niemand kijkt ernaar.
- Prima toe te staan: jpg, jpeg, png, pdf en in de meeste gevallen ook webp. Voor bouw- en techniekbedrijven vaak ook dwg of dxf.
- Alleen als u het echt nodig heeft: docx, xlsx, zip. Een zip-bestand kan van alles bevatten en wordt op de server niet gecontroleerd.
- Nooit toestaan: php, phtml, php5, js, html, htm, exe, sh, py, svg. Bij svg wordt vaak verrast gereageerd, want dat is toch een afbeelding? Klopt, maar een svg mag scripts bevatten en wordt door de browser als code gelezen.
Werk altijd met een witte lijst van wat mag, nooit met een zwarte lijst van wat niet mag. Op een zwarte lijst vergeet u altijd een variant, en juist die ene variant wordt geprobeerd.
Let er ook op dat een goede plugin niet alleen naar de extensie kijkt maar ook naar het bestandstype zelf. Een bestand dat factuur.pdf heet maar intern geen pdf is, hoort geweigerd te worden. Vraagt u dit na bij uw bouwer, dan is dit de zin die u gebruikt: controleert het formulier ook het mime-type, of alleen de bestandsnaam?
Een uploadveld veilig instellen: acht stappen
- Beperk de extensies tot wat u werkelijk ontvangt. Drie of vier types is voor de meeste bedrijven genoeg.
- Zet een maximale bestandsgrootte. Vijf tot tien megabyte dekt foto’s en pdf’s ruim af. Wilt u dat verhogen, dan speelt ook uw serverinstelling mee; daarover gaat het artikel over het verhogen van de maximale uploadgrootte.
- Beperk het aantal bestanden per verzending, bijvoorbeeld tot drie.
- Laat de plugin het bestand hernoemen naar een willekeurige naam. Dan kan niemand raden waar zijn upload terechtkwam.
- Sla uploads niet op in de standaard mediamap als uw plugin een aparte, afgeschermde map kan gebruiken. Dat scheelt een hoop.
- Blokkeer het uitvoeren van code in de uploadmap. Dit is de maatregel met de meeste opbrengst; hoe dat werkt staat beschreven bij het afschermen van de uploadmap tegen PHP.
- Zet een spamfilter voor het formulier zelf. Zonder dat krijgt u vooral geautomatiseerde inzendingen met bijlagen, wat het geheel onhoudbaar maakt.
- Ruim oude uploads op. Zet een halfjaarlijkse taak in uw agenda om bestanden van afgehandelde aanvragen te verwijderen.
Test na het instellen zelf één keer een geldige upload en één keer een bestand dat geweigerd moet worden, bijvoorbeeld een leeg tekstbestand dat u hernoemt naar test.php. Wordt dat netjes geweigerd met een foutmelding, dan werkt uw filter.
Waar de bestanden daarna belanden
Veel ondernemers weten niet dat de meegestuurde bestanden meestal op twee plaatsen staan: als bijlage in de mail die u ontvangt, en als bestand op uw server. Dat tweede exemplaar blijft er jaren staan, ook als de aanvraag allang is afgehandeld.
Dat is niet alleen een opslagkwestie. Staat er een identiteitsbewijs, een salarisstrook of een medisch formulier tussen, dan bewaart u persoonsgegevens waarvan u zich moet afvragen of dat nog mag. Voor gevoelige documenten is een formulier op de website sowieso niet de aangewezen route; een beveiligd portaal of een deelmap bij een clouddienst past daar beter bij. Wij zijn geen juristen, dus laat u bij twijfel adviseren over wat u van uw klanten mag vragen.
Praktisch punt tot slot: controleer of de map met uploads meeloopt in uw back-up. Bij sommige hostingpakketten worden grote mediamappen overgeslagen om ruimte te sparen, en dat merkt u pas op het verkeerde moment.
Wanneer u het uploadveld beter weglaat
Niet elk bedrijf heeft dit nodig. Ontvangt u een paar keer per maand een bijlage, dan is “stuur uw tekening gerust naar ons mailadres” een prima oplossing die u geen enkel risico kost. Een uploadveld verdient zich pas terug als het echt werk scheelt, bijvoorbeeld bij tientallen aanvragen per week of wanneer de bijlage nodig is om überhaupt een prijs te kunnen geven.
Twijfelt u, dan is de tussenvorm bruikbaar: laat het formulier eerst de gegevens ophalen en stuur in de bevestigingsmail een uitnodiging om bestanden te mailen of te uploaden in een omgeving die daarvoor gemaakt is. Iets meer stappen voor de klant, aanzienlijk minder onderhoud voor u.
Kort samengevat
Een uploadveld is geen probleem, een ongecontroleerd uploadveld wel. Beperk de bestandstypen, beperk de grootte, laat bestanden hernoemen, blokkeer code in de uploadmap en ruim periodiek op. Vijf ingrepen die samen misschien een halfuur kosten en het overgrote deel van het risico wegnemen.
Wie dit soort instellingen niet zelf wil bijhouden, laat het meelopen in een beveiligingsronde met periodieke controle. Bij WebMaintor zit de uploadmap standaard in die controle, simpelweg omdat het een van de weinige plekken is waar buitenstaanders iets mogen achterlaten.
Concrete volgende stap: open de instellingen van uw formulier en kijk naar het veld met toegestane bestandstypen. Staat daar niets ingevuld of staat er een sterretje, dan is dat het eerste wat u vanmiddag aanpast.



