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:
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.
Sollte behoben sein, da der WebServer komplett überarbeitet wurde und somit der alte Parser entfernt wurde. Siehe (dc98c6cb00c95066980131883c7f518c27a2acfb) mit v.3.0.0
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&el=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
RequestParser::getField
durchsucht nun jedoch den kompletten Konfigurations-String inklusive Feldnamen und Benutzereingabe. Da die Benutzereingabe jedoch den Stringampel
als Teil vonmqttuser=co2ampel
beinhaltet, wird hierauf zuerst gematcht. AlsstartIndex
undstopIndex
wird dann der darauf folgende String&mqttpass=
gefunden, wobeistartIndex
>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.