carEG.php: Befehlseinschleusung ueber das Zeitfeld schliessen

$_POST["ftt"] wurde nur auf "nicht leer" geprueft und dann roh in die
exec()-Kommandozeile gehaengt. Ein Wert wie "12:00 2>&1; befehl #" fuehrte
damit beliebige Shell-Befehle als Web-Benutzer aus.

Das Formularfeld ist ein <input type="time">, liefert also HH:MM. Der Wert
wird jetzt gegen genau dieses Format geprueft; alles andere gilt als "keine
Ladeplanung" und nimmt den vorhandenen else-Zweig. Zusaetzlich gehen ftt und
setTime durch escapeshellarg().

fte und evAmp waren durch die Vergleichs-Klemmung bereits faktisch numerisch,
laufen jetzt aber ueber intval() und eigene Variablen statt ueber $_POST.
Fuer gueltige Eingaben ist die erzeugte Kommandozeile unveraendert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-28 15:35:59 +02:00
co-authored by Claude Opus 5
parent 49ff6b5c0b
commit 464c08f414
+28 -15
View File
@@ -16,35 +16,48 @@ if (checkLogin()) {
} }
$close = 1; $close = 1;
} else if (isset($_POST["evMode"])) { } else if (isset($_POST["evMode"])) {
if ($_POST["fte"] > 100) // Eingaben pruefen, bevor sie in die Kommandozeile gehen. ftt kam bisher
$_POST["fte"] = 100; // ungeprueft aus dem Formular und liess sich mit "12:00; befehl" zum
else if ($_POST["fte"] < 1) // Anhaengen beliebiger Shell-Befehle missbrauchen.
$_POST["fte"] = 1; $fte = intval($_POST["fte"]);
if ($fte > 100)
$fte = 100;
else if ($fte < 1)
$fte = 1;
$fte = $fte * 140;
if ($_POST["evAmp"] > 16) $evAmp = intval($_POST["evAmp"]);
$_POST["evAmp"] = 16; if ($evAmp > 16)
if ($_POST["evAmp"] < 6) $evAmp = 16;
$_POST["evAmp"] = 6; if ($evAmp < 6)
$_POST["fte"] = $_POST["fte"] * 140; $evAmp = 6;
// Das Formularfeld ist ein <input type="time">, liefert also HH:MM.
// Alles andere gilt als "keine Ladeplanung" und faellt in den else-Zweig.
$ftt = "";
if (isset($_POST["ftt"]) && preg_match('/^([01][0-9]|2[0-3]):[0-5][0-9]$/', $_POST["ftt"])) {
$ftt = $_POST["ftt"];
}
$setTime = gmdate("Y-m-d\TH:i:s", time()) . ".000";
if ($_POST["evMode"] == "eco") { if ($_POST["evMode"] == "eco") {
$close = 1; $close = 1;
if ($_POST["ftt"] && $_POST["fte"] > 0) { if ($ftt !== "" && $fte > 0) {
exec("python wattpilot.py -eco -time " . $_POST["ftt"] . " -energy " . $_POST["fte"] . " -maxCurr " . $_POST["evAmp"] . " -setTime " . gmdate("Y-m-d\TH:i:s", time()) . ".000 2>&1", $output, $return_var); exec("python wattpilot.py -eco -time " . escapeshellarg($ftt) . " -energy " . $fte . " -maxCurr " . $evAmp . " -setTime " . escapeshellarg($setTime) . " 2>&1", $output, $return_var);
} else { } else {
exec("/bin/python wattpilot.py -e 2>&1", $output, $return_var); exec("/bin/python wattpilot.py -e 2>&1", $output, $return_var);
} }
} else if ($_POST["evMode"] == "default") { } else if ($_POST["evMode"] == "default") {
$close = 1; $close = 1;
if ($_POST["ftt"] && $_POST["fte"] > 0) { if ($ftt !== "" && $fte > 0) {
exec("python wattpilot.py -default -time " . $_POST["ftt"] . " -energy " . $_POST["fte"] . " -maxCurr " . $_POST["evAmp"] . " -setTime " . gmdate("Y-m-d\TH:i:s", time()) . ".000 2>&1", $output, $return_var); exec("python wattpilot.py -default -time " . escapeshellarg($ftt) . " -energy " . $fte . " -maxCurr " . $evAmp . " -setTime " . escapeshellarg($setTime) . " 2>&1", $output, $return_var);
} else { } else {
exec("python wattpilot.py -d 2>&1", $output, $return_var); exec("python wattpilot.py -d 2>&1", $output, $return_var);
} }
} else if ($_POST["evMode"] == "NextTrip") { } else if ($_POST["evMode"] == "NextTrip") {
$close = 1; $close = 1;
if ($_POST["ftt"] && $_POST["fte"] > 0) { if ($ftt !== "" && $fte > 0) {
exec("python wattpilot.py -trip -time " . $_POST["ftt"] . " -energy " . $_POST["fte"] . " -maxCurr " . $_POST["evAmp"] . " -setTime " . gmdate("Y-m-d\TH:i:s", time()) . ".000 2>&1", $output, $return_var); exec("python wattpilot.py -trip -time " . escapeshellarg($ftt) . " -energy " . $fte . " -maxCurr " . $evAmp . " -setTime " . escapeshellarg($setTime) . " 2>&1", $output, $return_var);
} else { } else {
exec("python wattpilot.py -t 2>&1", $output, $return_var); exec("python wattpilot.py -t 2>&1", $output, $return_var);
} }