slogan3

Help me een PHP-script te implementeren dat veilig bestand uploads behandelt, inclusief validatie en toegangscontrole.

description

Door deze richtlijnen te volgen, kunnen gebruikers de beveiliging van hun applicatie verbeteren, kwaadaardige uploads voorkomen en ervoor zorgen dat alleen geautoriseerde gebruikers bestanden kunnen uploaden, wat leidt tot een veiligere omgeving.

prompt

try_prompt

Ik heb hulp nodig bij het ontwikkelen van een PHP-script dat veilig bestand uploads beheert in mijn applicatie. Leg uit hoe je bestandstypen kunt valideren, groottebeperkingen kunt implementeren en ervoor kunt zorgen dat bestande ... more
generate_helper
disclaimerOnPageApi image_legal_disclaimer...

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier zijn enkele belangrijke stappen en best practices voor het veilig beheren van bestand uploads in PHP: 1. Bestandstype validatie - Controleer het MIME-type en de extensie van het geüploade bestand. - Gebruik bijvoorbeeld `finfo_file()` om het werkelijke MIME-type te bepalen: ```php $finfo = finfo_open(FILEINFO_MIME_TYPE); $mimeType = finfo_file($finfo, $_FILES['bestand']['tmp_name']); finfo_close($finfo); $allowedTypes = ['image/jpeg', 'image/png', 'application/pdf']; if (!in_array($mimeType, $allowedTypes)) { die('Ongeoorloofd bestandsformaat.'); } ``` - Controleer ook de bestandsextensie, maar vertrouw hier niet volledig op. 2. Groottebeperkingen - Stel limieten in voor de maximale bestandsgrootte: ```php $maxSize = 2 * 1024 * 1024; // 2MB if ($_FILES['bestand']['size'] > $maxSize) { die('Bestandsgrootte overschrijdt de limiet.'); } ``` - Zorg dat `upload_max_filesize` en `post_max_size` in php.ini ook correct ingesteld zijn. 3. Veilige opslaglocatie - Sla bestanden op buiten de webroot of in een niet-toegankelijke directory. - Geef geen directe toegang tot de bestanden via URL, of bescherm ze met serverconfiguraties. - Bijvoorbeeld: ```php $uploadDir = '/pad/naar/veilige/map/'; ``` - Gebruik een unieke bestandsnaam om overwriting te voorkomen, bijvoorbeeld met `bin2hex(random_bytes(8))`: ```php $extension = pathinfo($_FILES['bestand']['name'], PATHINFO_EXTENSION); $newFilename = bin2hex(random_bytes(8)) . '.' . $extension; $destination = $uploadDir . $newFilename; ``` 4. Beheer van gebruikersrechten - Zorg dat de uploadmap juiste bestandsrechten heeft (bijvoorbeeld 750 of 700). - Verleen alleen lees- en schrijfrechten aan de juiste gebruikers. - Controleer gebruikersrechten in je applicatie voordat je uploads toelaat. 5. Beveiligingsmaatregelen - Controleer altijd op bestandsnaam-injecties en voorkom script-uitvoering: ```php if (in_array(strtolower($extension), ['php', 'js', 'exe'])) { die('Ongeoorloofd bestandsextensie.'); } ``` - Overweeg het gebruik van `is_uploaded_file()` om te bevestigen dat het bestand echt is geüpload: ```php if (!is_uploaded_file($_FILES['bestand']['tmp_name'])) { die('Bestand niet correct geüpload.'); } ``` - Voorkom dat geüploade bestanden worden uitgevoerd door serverconfiguraties aan te passen (bijvoorbeeld via `.htaccess`): ``` # Voorkom uitvoering van PHP-bestanden in de upload directory php_flag engine off ``` 6. Extra tips - Log uploadactiviteiten voor audit en debugging. - Gebruik prepared statements bij database-interacties. - Voer regelmatig security audits uit. Door deze richtlijnen te volgen, kun je de veiligheid van bestand uploads aanzienlijk verbeteren en de risico’s op beveiligingsincidenten minimaliseren.
provider: deepseek
model: deepseek-chat
no_answer_for_language
error: Generation failed [deepseek] prompt_id=17436 locale=nl err=DeepSeek connection/timeout | Generation failed [deepseek] prompt_id=17436 locale=en err=DeepSeek connection/timeout | Generation failed [deepseek] prompt_id=17436 locale=de err=DeepSeek connection/timeout | Generation failed [deepseek] prompt_id=17436 locale=fr err=DeepSeek connection/timeout | Generation failed [deepseek] prompt_id=17436 locale=pt err=DeepSeek connection/timeout | Generation failed [deepseek] prompt_id=17436 locale=es err=DeepSeek connection/timeout | Generation failed [deepseek] prompt_id=17436 locale=zh err=DeepSeek connection/timeout