En vous promenant sur Beamreactor, nous stockons votre IP 48h pour des raisons de sécurité.

Lecteur Markdown

diskmaster Documentation › DISKMASTER_IMPROVEMENTS_FR

DISKMASTER_IMPROVEMENTS_FR

DiskMaster 3.1 - Améliorations 2025 #

🎯 Nouveautés #

✅ Ce qui a été ajouté #

1. Copie bidirectionnelle : `← COPY`

- Copie maintenant de la liste 2 (droite) vers liste 1 (gauche)

- Symétrisation complète des opérations

2. Upload sécurisé : `📤 UPLOAD`

- Interface drag & drop (prête pour amélioration)

- Upload multiple de fichiers

- Gestion des doublons automatique

- Progress bar

3. Download sécurisé : `📥 DOWNLOAD`

- Plus de lien direct exposant le path

- Passage par `diskmaster.mod` handler

- Force le téléchargement pour TOUS les types (y compris .md)

- Validation path complète

---

📦 Fichiers modifiés/créés #

1. `diskmaster.php` (modifié) #

Changements :

  • Ajout bouton `← COPY` (ligne ~652)
  • Ajout bouton `📤 UPLOAD` (ligne ~656)
  • Fonction `copyFileReverse()` pour copie inverse
  • Fonction `uploadFile()` avec dialog modal
  • Fonction `downloadFile()` utilise maintenant le handler sécurisé

2. `diskmaster.mod.php` (nouveau) #

Actions supportées :

  • `download` : Téléchargement sécurisé avec validation path
  • `upload` : Upload multiple avec sanitization
  • `info` : Infos fichier (pour usage futur)

---

🔧 Utilisation #

Copie bidirectionnelle #

Avant : Seul `COPY →` (gauche vers droite)

Maintenant :

1. `COPY →` : Gauche vers droite (comme avant)

2. `← COPY` : Droite vers gauche (nouveau!)

Workflow :

1. Sélectionne un fichier dans la liste de DROITE
2. Clique sur "← COPY"
3. Le fichier est copié vers la liste de GAUCHE

---

Upload de fichiers #

Workflow :

1. Navigue vers le dossier de destination (liste de gauche)
2. Clique sur "📤 UPLOAD"
3. Sélectionne un ou plusieurs fichiers
4. Clique "UPLOAD"
5. La page recharge automatiquement

Fonctionnalités :

  • Upload multiple simultané
  • Gestion automatique des doublons (ajoute `_1`, `_2`, etc.)
  • Sanitization des noms de fichiers
  • Progress bar visuelle
  • Messages d'erreur clairs

---

Download sécurisé #

Avant :

window.location.href = getCurrentSourcePath() + '/' + selectedSource;
// → Exposait le path, .md affichés comme texte brut

Maintenant :

window.location.href = '?obj=diskmaster.mod&action=download&path=' + filepath;
// → Handler valide le path, force download pour TOUS types

Sécurité :

  • ✅ Path traversal impossible (`../` bloqué)
  • ✅ Validation contre whitelist `$allowedDirs`
  • ✅ Force header `Content-Disposition: attachment`
  • ✅ Fichiers .md téléchargés au lieu d'affichés

---

🛡️ Sécurité #

Validation des paths #

Tous les paths passent par `validatePath()` :

function validatePath($path, $allowedDirs) {
	// 1. Sanitize via Parser
	// 2. Remove ../ et backslashes
	// 3. Check contre whitelist
	// 4. Return false si invalide
}

Upload sécurisé #

// 1. Vérif ADMIN level
if(!secure('SYSTEM_LEVEL_ADMIN')) exit;

// 2. Vérif path destination
if(!validatePath($targetDir, $allowedDirs)) exit;

// 3. Sanitize filename
$filename = preg_replace('/[^a-zA-Z0-9._-]/', '_', $filename);

// 4. Vérif upload errors
if($_FILES['files']['error'][$i] !== UPLOAD_ERR_OK) continue;

Download sécurisé #

// 1. Validate path
if(!validatePath($dir, $allowedDirs)) {
	http_response_code(403);
	exit;
}

// 2. Vérif existence
if(!file_exists($fullPath)) {
	http_response_code(404);
	exit;
}

// 3. Force download
header('Content-Disposition: attachment; filename="' . $filename . '"');

---

🐛 Corrections de bugs #

Bug #1 : Fichiers .md servis comme HTML #

Avant : `window.location.href = path/file.md` → Navigateur affiche le markdown brut

Après : Handler force `Content-Disposition: attachment` → Téléchargement systématique

Bug #2 : Liste 2 inutilisable #

Avant : Impossible de copier liste2 → liste1

Après : Bouton `← COPY` fait l'inverse de `COPY →`

Bug #3 : Pas d'upload #

Avant : Aucun moyen d'envoyer des fichiers

Après : Interface complète avec upload multiple

---

📊 Tests recommandés #

Test 1 : Copie bidirectionnelle #

1. Créer fichier test.txt dans user/
2. Naviguer vers user/data/ (liste droite)
3. Sélectionner test.txt (liste gauche)
4. COPY → (gauche vers droite)
5. Vérifier présence dans user/data/
6. Sélectionner test.txt (liste DROITE)
7. ← COPY (droite vers gauche)
8. Vérifier copie réussie

Test 2 : Upload #

1. Naviguer vers user/test/
2. Cliquer "📤 UPLOAD"
3. Sélectionner plusieurs fichiers
4. Cliquer "UPLOAD"
5. Vérifier que tous les fichiers sont présents
6. Essayer d'uploader un fichier avec le même nom
7. Vérifier ajout automatique de _1, _2, etc.

Test 3 : Download sécurisé #

1. Créer un fichier test.md avec du contenu
2. Le sélectionner dans la liste
3. Cliquer "📥 DOWNLOAD"
4. Vérifier que le navigateur le TÉLÉCHARGE au lieu de l'afficher
5. Ouvrir le fichier téléchargé
6. Vérifier que le contenu est intact

Test 4 : Sécurité path traversal #

Tenter (via console ou Postman):
GET ?obj=diskmaster.mod&action=download&path=../../etc/passwd

Résultat attendu: 403 Forbidden

---

🎨 Améliorations futures possibles #

Upload drag & drop #

Actuellement : Bouton file input classique

Amélioration :

// Zone drop
<div id="dropZone" ondrop="handleDrop(event)" ondragover="allowDrop(event)">
	Glissez vos fichiers ici
</div>

function handleDrop(e) {
	e.preventDefault();
	const files = e.dataTransfer.files;
	uploadFiles(files);
}

Preview fichiers #

Avant téléchargement, afficher :

  • Images : Thumbnail
  • Texte : Aperçu 100 premiers caractères
  • PDF : Première page

Compression ZIP #

Bouton "Download as ZIP" pour télécharger un dossier complet

Permissions utilisateur #

Actuellement : `SYSTEM_LEVEL_ADMIN` requis

Amélioration : Permissions granulaires par dossier

$allowedDirs = [
	'user' => ['read', 'write', 'delete'],
	'user/shared' => ['read', 'write'],
	'user/public' => ['read']
];

---

⚠️ Notes importantes #

Permissions serveur #

Upload nécessite permissions d'écriture :

chmod 755 user/
chmod 755 user/data/
# etc.

Taille max upload #

Configurer dans `php.ini` :

upload_max_filesize = 50M
post_max_size = 50M
max_execution_time = 300

Types MIME #

Le handler détecte automatiquement le MIME type via `finfo_file()`.

Pour forcer un type spécifique :

$mimeType = 'application/octet-stream'; // Force binary download

---

📞 Support #

Logs d'erreurs #

Vérifier :

tail -f /var/log/php/error.log

Troubleshooting #

Upload ne marche pas :

1. Vérifier permissions dossier

2. Vérifier `upload_max_filesize` PHP

3. Vérifier logs Apache/Nginx

4. Tester avec un petit fichier (<1MB)

Download ne marche pas :

1. Vérifier que le fichier existe

2. Vérifier path validation

3. Vérifier niveau admin user

4. Tester avec curl : `curl -v "url?obj=diskmaster.mod&action=download&path=user/test.txt"`

Copy← ne fait rien :

1. Vérifier sélection dans liste DROITE

2. Vérifier console JavaScript pour erreurs

3. Vérifier permissions destination

---

Version : DiskMaster 3.1

Date : 2025-12-29

Auteur : Treveur 'Nowee' Bretaudière

de en fr