01_FHEMWEB.pm - & Zeichenreferenz (nur im Quelltext sichtbar) - Diskussion

Begonnen von HomeAuto_User, 10 August 2019, 13:05:16

Vorheriges Thema - Nächstes Thema

HomeAuto_User

Hallo,

ich habe mich mal beim Debuggen durchgeforstet und bin durch Zufall auf einen Hinweis im Quelltext gestoßen.
Sichtbar ist dieser nur wenn die Syntax Hervorhebung aktiv ist. (Im Bild zu sehen)

"&" startete keine Zeichenreferenz. ("&" sollte warscheinlich als "&" kodiert sein.)

Wenn man im Modul 01_FHEMWEB.pm nun folgendes fixt, so ist es richtig aufgelöst. (Zeile 518)
(Ausgehend von der Version # $Id: 01_FHEMWEB.pm 19904 2019-07-28 08:53:49Z rudolfkoenig $ )

IST
  $FW_CSRF = (defined($defs{$FW_wname}{CSRFTOKEN}) ?
                "&fwcsrf=".$defs{$FW_wname}{CSRFTOKEN} : "");


ändern in
  $FW_CSRF = (defined($defs{$FW_wname}{CSRFTOKEN}) ?
                "&fwcsrf=".$defs{$FW_wname}{CSRFTOKEN} : "");


somit ist der Hinweis weg. Getestet wurde das ganze mit dem Firefox v68.0.1

MfG


EDIT:
Zusätzlich ist der selbe Fehler in Zeile 1664.

"$FW_ME/FileLog_logWrapper?dev=$lfn&type=text&file=$fn");
durch
"$FW_ME/FileLog_logWrapper?dev=$lfn&type=text&file=$fn");
ersetzen
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

Otto123

Nach meinem Wissen wird dort die Variable $FW_CSRF befüllt. Die enthält danach die Zeichenkette in der Form &fwcsrf=csrf_387849633005507, die dann für die Verwendung des csrf Tokens an jeden Befehl in der url angehängt wird.
Ich befürchte nach dem "Fix" funktioniert nix mehr.  ::)

Aber ich bin da kein Spezi :)

Edit: Ich habe ähnliche Erfahrungen mit https://www.shellcheck.net/ gemacht. Wenn man die dortigen empfohlenen "Code Richtigstellungen" alle einarbeitet, funktioniert anschließend nichts mehr.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

HomeAuto_User

Grüße in die selbe Stadt :-)

@Otto, du hast es richtig widerlegt was dort passier aber das & wird durch die Zeichen & "ersetz" siehe https://wiki.selfhtml.org/wiki/Referenz:HTML/Zeichenreferenz.
Wir könnten es auch Kompatiblität nennen. Ich selbst hatte soche Fehler auch schon mit anderen Zeichen oder Umlauten welche fehlerhaft dargestellt werden. Wenn man diese "uns normale Schreibweise" anpasst in die kompatible, so sind die Zeichen für uns auch wieder "richtig". Es liegt ja der Zeichensatz.

Eine NICHTFUNKTION konnte ich nicht bestätigen.

Edit: Aufgrund das ja der Zeichensatz und mehre Programmiersprachen hier zum tragen kommen, je nach Umsetzung und Zusammenspiel, kann glaube nur Rudolf direkt selbst mal schauen und es bewerten. Ich selbst hatte an anderere Stelle nur das Beispiel gehabt, das nichts ging mit der normalen Schreibweise und mit Änderung bzw. Anpassung ging es.

Es kann ja auch nun wieder nur sein, das der eine Browser das falsch interprätiert und / oder eine andere Software nicht. Sowas ist bei der "Code übergreifenden Programmierung" immer buggi.
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

Otto123

Da das & Zeichen (so wie es ist, also nicht "encoded") in urls aber sehr häufig auftritt, ist es nicht eine Art Trenner/Einleiter für Parameter/Variablen? Also so hatte ich das an der Stelle immer verstanden.  ???

Ich rede da ziemlich unwissend daher, will es aber gerne verstehen :)
Ist es nicht so, das an der Stelle die URL "vorbereitet" wird? Und da gilt doch URL Encoding, da wird das Leerzeichen ja z.B. als %20 kodiert. https://de.wikipedia.org/wiki/URL-Encoding und das & hat eine besondere Bedeutung.
Was Dir da angezeigt wird ist doch html Encoding? Das passiert doch bestenfalls in irgendeinem Prozess "danach"? Und da wird doch dann das Leerzeichen als   dargestellt.

Am Ende ist es für die Funktion "egal" an welcher Stelle es umkodiert wird?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rudolfkoenig

Das & wird verwendet, um im URL (die Eingabezeile oben im Browser) Parameter voneinander zu trennen: room=Kueche&fwcsrf=XXX
Wenn man im Wert ein & unterbringen moechte, dann schreibt man %26: room=Kueche%26Bad fuer Kueche&Bad

& hat auch im HTML eine Sonderbedeutung: es leitet spezielle Sequenzen ein, wie &auml fuer ä usw.
Damit man & im HTML verwenden kann, schreibt man es als & also Kueche&Bad.

Ich bin z.Zt. der Ansicht, dass so wie es in FHEMWEB verwendet ist, richtig ist, da Zeile 518 und 1664 bereiten ein URL vor.

HomeAuto_User

Solange die Funktion gegeben ist und wir es so belassen, dann sehen wir das Ganze als Anregung einer Diskussion :-)
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet