mariolukas / Watterott-CO2-Ampel-Plus-Firmware

Firmware for Watterott CO2 Ampel (Plus Version)
GNU General Public License v3.0
15 stars 13 forks source link

Konfiguration fehlerhaft, wenn Benutzereingabe Feldnamen beinhaltet #31

Closed jzdm closed 2 years ago

jzdm commented 3 years ago

Wenn Teile der Benutzereingabe im Konfigurationsmodus gleichlautend zu den Feldnamen der Konfiguration ist, gibt die Methode RequestParser::getField fehlerhafte Konfigurationsparameter zurück.

Folgendes Beispiel: Die CO2Ampel bekommt durch den Browser des Benutzer folgenden String für die Konfiguration gesendet:

broker=192.168.1.2&port=1883&topic=sensors&mqttuser=co2ampel&mqttpass=test123&ampel=co2ampel&ssid=iot&pwd=test123&ap_pwd=co2admin&buzzer=true&led=true&format=0

In der Datei NetworkManager.cpp wird dies ab Zeile 184 ausgewertet.

Z.B. wird der Name der CO2Ampel gesetzt mit

if ((requestParser.getField("ampel").length() > 0)) {
    requestParser.getField("ampel").toCharArray(cfg.ampel_name, 40);
}

RequestParser::getField durchsucht nun jedoch den kompletten Konfigurations-String inklusive Feldnamen und Benutzereingabe. Da die Benutzereingabe jedoch den String ampel als Teil von mqttuser=co2ampel beinhaltet, wird hierauf zuerst gematcht. Als startIndex und stopIndex wird dann der darauf folgende String &mqttpass= gefunden, wobei startIndex > stopIndex. Folglich erhält die Ampel den falschen Namen &mqttpass=, unabhängig von der sonstigen Benutzereingabe.

Das Problem ist beliebig erweiterbar auf alle anderen Feldnamen der Konfiguration.

Um das Problem zu beheben, müssten Feldnamen der Konfiguration und die Benutzereingabe zunächst vollständig voneinander anhand der Trennzeichen & und = getrennt werden und anschließend nur die Liste der Feldnamen durchsucht werden.

mariolukas commented 2 years ago

Sollte behoben sein, da der WebServer komplett überarbeitet wurde und somit der alte Parser entfernt wurde. Siehe (dc98c6cb00c95066980131883c7f518c27a2acfb) mit v.3.0.0