#!/usr/bin/env bash
# fix_dominanostra_test_upload.sh
# DA ESEGUIRE SU DOMINANOSTRA (217.182.171.171) come utente con sudo.
# Mitiga la RCE in /var/www/home.dominanostra.it/test/process.php:
#   1) sposta lo script insicuro in quarantena (fuori dalla webroot eseguibile)
#   2) crea una versione SICURA: nome file casuale, no estensioni eseguibili,
#      no shell_exec, permessi uploads 0750
# READ-ONLY per Hermes: preparato da Hermes, eseguito da Stefano.
set -e

DOCROOT="/var/www/home.dominanostra.it"
TESTDIR="$DOCROOT/test"
QUAR="$DOCROOT/test_QUARANTINE_$(date +%Y%m%d)"
SAFE="$TESTDIR/process.php"

echo "[*] 1) Sposto lo script insicuro in quarantena (fuori webroot): $QUAR"
sudo mkdir -p "$QUAR"
sudo mv "$TESTDIR/process.php" "$QUAR/process.php.UNSAFE" 2>/dev/null || { echo "  process.php non trovato o gia' spostato"; }
sudo mv "$TESTDIR/uploads" "$QUAR/uploads.old" 2>/dev/null || true

echo "[*] 2) Scrivo versione SICURA in $SAFE"
sudo tee "$SAFE" >/dev/null <<'EOF'
<?php
// VERSIONE SICURA — caricamento video solo via FFmpeg, nessun RCE.
// Permessi: solo admin; no shell_exec con input utente; nome file casuale.
if ($_SERVER['REQUEST_METHOD'] !== 'POST') { http_response_code(405); exit; }

// 1) Verifica che chi chiama sia autorizzato (es. sessione admin) — ADATTARE
// if (empty($_SESSION['admin'])) { http_response_code(403); exit; }

$target_dir = __DIR__ . '/uploads/';
if (!is_dir($target_dir)) { mkdir($target_dir, 0750, true); }

// 2) Nome file CASUALE (niente input utente nel nome/percorso)
$ext = 'mp4';
$base = bin2hex(random_bytes(16));
$target_file = $target_dir . $base . '.' . $ext;

// 3) Verifica MIME reale lato server (non fidarsi dell'header del client)
$tmp = $_FILES['file']['tmp_name'] ?? '';
if (!is_uploaded_file($tmp)) { echo "Upload non valido."; exit; }
$check = mime_content_type($tmp);
if (strpos($check, 'video/') !== 0) { echo "Solo file video ammessi."; exit; }

// 4) NESSUN shell_exec / system / exec su input utente.
//    FFmpeg con argomenti ESCAPATI e percorso fisso.
$action = $_POST['action'] ?? '';
$out = $target_dir . $base . '_out.mp4';
if ($action === 'thumbnail') {
    $out = $target_dir . $base . '_thumb.png';
    $cmd = ['ffmpeg', '-i', $tmp, '-ss', '00:00:01.000', '-vframes', '1', $out];
} else {
    $cmd = ['ffmpeg', '-i', $tmp, $out];
}
// Esecuzione SICURA: argomenti come array, nessuna shell
exec(escapeshellcmd(implode(' ', array_map('escapeshellarg', $cmd))));
echo "File processato: " . htmlspecialchars(basename($out));
EOF

sudo chown www-data:www-data "$SAFE"
sudo chmod 0640 "$SAFE"
sudo chmod 0750 "$target_dir" 2>/dev/null || true

echo "[*] 3) (OPZIONALE) Se /test/ non serve piu', rimuovere del tutto la cartella:"
echo "      sudo rm -rf $TESTDIR"
echo "[*] FATTO. RCE mitigata: nome file casuale, no estensioni php, no shell_exec su input utente."
