Upload via GUI (335 Dateien)
This commit is contained in:
@@ -47,6 +47,13 @@ function check_honeypot(): void
|
||||
}
|
||||
}
|
||||
|
||||
/** Stimmt der Formular-Token mit dem der Sitzung überein? (ohne Abbruch, für Anmeldeseiten mit freundlicher Meldung) */
|
||||
function csrf_valid(): bool
|
||||
{
|
||||
$token = $_POST['csrf_token'] ?? '';
|
||||
return $token !== '' && hash_equals($_SESSION['csrf_token'] ?? '', $token);
|
||||
}
|
||||
|
||||
function verify_csrf(): void
|
||||
{
|
||||
$token = $_POST['csrf_token'] ?? '';
|
||||
@@ -1070,15 +1077,14 @@ function handle_ticket_upload(array $file): array
|
||||
// Endung prüfen (nur letzte Endung – verhindert doppelte wie shell.php.jpg)
|
||||
$ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
|
||||
// Doppelte Endungen blockieren (z.B. evil.php.jpg)
|
||||
$allParts = explode('.', strtolower($file['name']));
|
||||
// Auch wenn ein Admin die Liste der erlaubten Endungen erweitert: Typen, die ein Browser auf unserer Domain
|
||||
// als Seite/Skript ausführen würde (Uploads sind direkt abrufbar), und ausführbare Dateien bleiben gesperrt.
|
||||
$dangerousExts = ['php','php3','php4','php5','php7','php8','phtml','phar','asp','aspx','jsp','jspx','sh','py','pl','cgi','exe',
|
||||
'html','htm','xhtml','shtml','svg','svgz','xml','xsl','xslt','js','mjs','htc','swf','hta','jar','vbs','bat','cmd','ps1','msi','dll','com','scr','cer','crt'];
|
||||
foreach ($allParts as $part) {
|
||||
if (in_array($part, $dangerousExts, true)) {
|
||||
return ['error' => 'Dieser Dateityp ist aus Sicherheitsgründen nicht erlaubt.'];
|
||||
}
|
||||
// Gespeichert wird unter einem Zufallsnamen mit nur der letzten Endung. Namen wie „www.example.com.pdf“ oder „scan.js.2024.jpg“
|
||||
// sind daher harmlos und werden nicht abgelehnt; geprüft wird die tatsächliche Endung.
|
||||
if (in_array($ext, $dangerousExts, true)) {
|
||||
return ['error' => 'Dieser Dateityp (.' . $ext . ') ist aus Sicherheitsgründen nicht erlaubt: ' . $file['name']];
|
||||
}
|
||||
if (!in_array($ext, $allowed, true)) {
|
||||
return ['error' => 'Dieser Dateityp ist nicht erlaubt (' . e($ext) . '). Erlaubt: ' . implode(', ', $allowed)];
|
||||
@@ -1094,7 +1100,7 @@ function handle_ticket_upload(array $file): array
|
||||
$mimeType = finfo_file($finfo, $file['tmp_name']);
|
||||
finfo_close($finfo);
|
||||
if (in_array($mimeType, $dangerousMimes, true)) {
|
||||
return ['error' => 'Dieser Dateityp ist aus Sicherheitsgründen nicht erlaubt.'];
|
||||
return ['error' => 'Der Inhalt der Datei „' . $file['name'] . '“ sieht nach einem Skript aus und ist aus Sicherheitsgründen nicht erlaubt.'];
|
||||
}
|
||||
}
|
||||
// Sicherer, zufälliger Dateiname ohne ursprüngliche Extension-Inferenz
|
||||
|
||||
Reference in New Issue
Block a user