Nutzung des csrfToken - Anleitung?

Begonnen von ManuZz, 28 Februar 2017, 10:03:17

Vorheriges Thema - Nächstes Thema

ManuZz

Hallo zusammen,

ich bin hier sicher der noobigste unter allen, aber ich habe keine Anleitung gefunden wie ich das csrfToken einbaue. Das auf none setzen hat einmal funktioniert. Nun bekomme ich ein neuen csrfToken Fehler im log angezeigt. sieht nach einem neu generierten Token aus.
Ich würde ja auch warten (auch wenn ich nicht weiß auf was, denn ich habe nirgends etwas gefunden wie ich das schöne Sicherheitsfeature einbaue), aber es sind alle meine Lichtschalter in der Wohnung lahmgelegt.

Ich habe in der config dies stehen:

attr WEB csrfToken none
attr WEBphone csrfToken none
attr WEBtablet csrfToken none

Aber bekomme immer noch den Fehler: FHEMWEB WEB CSRF error:  ne fhem_50100039103845.3. For detals see the csrfToken FHEMWEB attribute

Leider bin ich auch nicht der ultimative crack, darum habe ich keine Ahnung wie ich nun weiter komme. Ich habe hier im Forum auch nur gelesen das man es hätte einbauen sollen, aber nicht wie.
Für Hilfe wäre ich sehr dankbar...

rudolfkoenig

#1
Zitatkeine Anleitung gefunden wie ich das csrfToken einbaue
Wohin?

Falls man ueber FHEMWEB einen Befehl (cmd=...) von einem "Drittsystem" (nicht der Browser, der die FHEMWEB Seite aufgerufen hat) absetzen will, dann muss man fwcsrf=<TOKEN> setzen. <TOKEN> ist im HTTP Header als X-FHEM-csrfToken gesetzt, es gibt im HTML <body> Tag auch ein fwcsrf Attribut.

Falls man fuer FHEMWEB eine Seite generiert (z.Bsp. im Modul eigenen FW_detailFn), dann muss man an alle <a> Links mit cmd=... $FW_CSRF dranhaengen.

Beide Punkte betreffen normalerweise nur Programmierer.

"Normale" Benutzer sind nur dann betroffen, falls sie mit dem weblink Modul, htmlCode Variante FHEM-Befehle aufrufen, dann muss man $FW_CSRF dranhaengen.

Edit: Tippfehler korrigiert

ManuZz

Ok, ich habe gerade eingesehen das ich überhaupt keine Ahnung habe. Ich werd glaub ich einfach ein Fallback auf die alte Version machen und alles dort nochmal einrichten und fhem einfach nie wieder updaten, da die Abschaltung in der config nicht funktioniert und ich das token nicht eingebaut bekomme. Dazu fehlen mir einfach die Kenntnisse.
Trotzdem danke für die Sicherheit.


Grüße

Falls jmd die Zeit und Nerven hat, freue ich mich trotzdem über Hilfe. Meine Links sehen so aus:

<td><div class="col3"><a class="button" onclick="macheRequest('http://192.168.178.30:8083/fhem?cmd.Steckdose3=set Steckdose3 on&amp;room=Wohnzimmer')"><p>AN</p></a></div></td>


CoolTux

Zitat von: ManuZz am 28 Februar 2017, 11:28:40
Ok, ich habe gerade eingesehen das ich überhaupt keine Ahnung habe. Ich werd glaub ich einfach ein Fallback auf die alte Version machen und alles dort nochmal einrichten und fhem einfach nie wieder updaten, da die Abschaltung in der config nicht funktioniert und ich das token nicht eingebaut bekomme. Dazu fehlen mir einfach die Kenntnisse.
Trotzdem danke für die Sicherheit.


Grüße

Falls jmd die Zeit und Nerven hat, freue ich mich trotzdem über Hilfe. Meine Links sehen so aus:

<td><div class="col3"><a class="button" onclick="macheRequest('http://192.168.178.30:8083/fhem?cmd.Steckdose3=set Steckdose3 on&amp;room=Wohnzimmer')"><p>AN</p></a></div></td>

Und werden von wo aufgerufen? Aus einem FHEM weblink Device oder von irgendwo anders her?
Mal mehr Info bitte damit man auch helfen kann.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rabehd

Ich hänge mich mal dran/rein, weil ich es auch noch nicht richtig verstanden habe.
Erstmal habe ich "attr WEB csrfToken none" gesetzt.

Ich sende Befehle per Tasker vom Handy.
Beispiel: http://ip.net:port/fhem?cmd.AnwesenheitXX=set%20AnwesenheitXX%20noda&XHR=1

Was muss ich ändern?
Auch funktionierende Lösungen kann man hinterfragen.

CoolTux

Entweder eigene Webinstanz erstellen und den Token auf none setzen und dann nur Tasker darauf zugreifen lassen.
Oder Du rufst einmalig vor jedem senden eine FHEM Webseite auf und extrahierst den Token.

Ich suche mal eine Anleitung raus, hatte da mal was gesehen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

#7
Zitat von: rudolfkoenig am 28 Februar 2017, 10:15:45
Beide Punkte betreffen normalerweise nur Programmierer.
Hi,

das stimmt so ja nicht. Es betrifft denjenigen, der einfach von irgendwo (z.B. zweiter PC im Heimnetz) per url etwas in FHEM setzen oder abfragen will.

Wenn man z.B. bisher von einer anderen Linux Maschine mit einem curl http://$host:8083/fhem?cmd=set%20$name%20$event > /dev/null
einen Dummy setzen konnte, geht das jetzt nicht mehr.
Es geht auch nicht, wenn ich an die obige url den aktuellen Token in der Art &fwcsrf=fhem_3450307859263.46 anhänge.
Den aktuellen Token kann man ja zu diesem Zweck einfach in der Startseite von FHEM im Quelltext sehen, da einige interne Links genauso konstruiert sind. Daher schließe ich auch mal Schreibfehler aus  ;)

Die url  http://$host:8083/fhem?cmd=set%20$name%20$event&fwcsrf=fhem_3450307859263.46
funktioniert zwar im Browser wie bisher, aber mit curl geht es überhaupt nicht, auch nicht mit wget - was habe ich sonst noch auf der Kommandozeile für Varianten?
Ganz abgesehen davon, dass ich noch nicht weiß, wie ich das Token aus der aktuellen FHEMWEB Seite auf der Kommandozeile extrahiert bekomme.

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

CoolTux

#8
In dem Du den Header parst wenn Du eine FHEMWEB Seite auf rufst. Zum Beispiel die Startseite.

http://<fhemIP>:8083/fhem?XHR=1
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Zitat von: CoolTux am 28 Februar 2017, 12:19:06
parst
Kannst Du bitte ohne viel Aufwand einem der mit Powershell Kopierroutinen erstellen kann, mal ganz früher Turbopascal und Assembler programmiert hat und der shell und batch Routinen schreibt - dieses eine Wort noch etwas erweitern?    :-*

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

Wuppi68

Powershell/Batch/Shell

für welches Sytsem brauchst Du das denn?
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

ManuZz

ZitatUnd werden von wo aufgerufen? Aus einem FHEM weblink Device oder von irgendwo anders her?
Mal mehr Info bitte damit man auch helfen kann.

Ich habe eine kleine Webseite auf meinen raspberry laufen (dort läuft auch fhem) und dort sind die die aufrufe eingepflegt.

Danke schonmal für die Hilfe!

Otto123

http://<fhemIP>:8083/fhem?XHR=1
Die Zeile ergibt bei mir einen leeren Inhalt   ???

Ok ich kann einfach die Startseite holen und mit sed durchsuchen, ist das der Weg?

@wuppi68 ich habe auch noch Windows Rechner, eigentlich nur - außer meinen Himbeeren  8)

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

Wuppi68

Zitat von: Otto123 am 28 Februar 2017, 12:41:30
http://<fhemIP>:8083/fhem?XHR=1
Die Zeile ergibt bei mir einen leeren Inhalt   ???

Ok ich kann einfach die Startseite holen und mit sed durchsuchen, ist das der Weg?

@wuppi68 ich habe auch noch Windows Rechner, eigentlich nur - außer meinen Himbeeren  8)

Gruß Otto

Also ich würde nach dem Token greppen und dann schauen wie ich das Teil am einfachsten extrahieren kann ... sed scheint mir ein wenig zu mächtig dafür - obwohl es dort auf jeden Fall auch geht
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

CoolTux

Zitat von: Otto123 am 28 Februar 2017, 12:41:30
http://<fhemIP>:8083/fhem?XHR=1
Die Zeile ergibt bei mir einen leeren Inhalt   ???

Ok ich kann einfach die Startseite holen und mit sed durchsuchen, ist das der Weg?

@wuppi68 ich habe auch noch Windows Rechner, eigentlich nur - außer meinen Himbeeren  8)

Gruß Otto

Parsen ist Im Grunde einfach nur das auslesen nötiger Daten. Das kann man in Deinem Fall zum Beispiel mit mit grep machen und das Ergebnis als Variable zur Verfügung stellen.

Die Seite ist weiß aber der Quelltext sollte schon zu mindest den Header enthalten
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Zitat von: ManuZz am 28 Februar 2017, 12:38:58
Ich habe eine kleine Webseite auf meinen raspberry laufen (dort läuft auch fhem) und dort sind die die aufrufe eingepflegt.

Danke schonmal für die Hilfe!

Kannst Du mir sagen in welcher Sprache Du die Seite gemacht hast? php oder statisches HTML? Wüsstest Du wie man mittels JavaScript zum Beispiel Seiteninhalt abruft und nach Inhalten durchsucht?
Wenn nicht, mach es einfach so. Erstelle eine WEBINSTANZ die Du nur für Deine Aufrufe über die Webseite verwendest. Schaue Dir hierfür mal etwas genauer das allow Modul an. Hier kannst Du zugriffe auf Befehlsebene oder gar Deviceebene machen. Gibt glaube auch(vorsicht geraten) ein allowFrom wo Du die IP der Geräte die darauf zugreifen dürfen eintragen kannst.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

ZitatEs geht auch nicht, wenn ich an die obige url den aktuellen Token in der Art &fwcsrf=fhem_3450307859263.46 anhänge.

Das geht sehr wohl, das Token aendert sich aber (wenn nicht explizit via csrfToken gesetzt) nach jedem FHEM-Start. Wenn man sich nicht die Muehe mit dem Parsen von HTTP-Header oder body-Tag antun will, dann kann man auch ein festes csrfToken setzen. Oder man definiert eine "API" FHEMWEB-Instanz, mit gesetzten allowfrom, und csrfToken none.

CoolTux

Zitat von: rudolfkoenig am 28 Februar 2017, 13:29:25
Das geht sehr wohl, das Token aendert sich aber (wenn nicht explizit via csrfToken gesetzt) nach jedem FHEM-Start. Wenn man sich nicht die Muehe mit dem Parsen von HTTP-Header oder body-Tag antun will, dann kann man auch ein festes csrfToken setzen. Oder man definiert eine "API" FHEMWEB-Instanz, mit gesetzten allowfrom, und csrfToken none.

Und ich denke mal das ist genau das was wir dem User ManuZz ans Herz legen sollten. So wie von mir geschrieben. Ist das einfachste. Mache ich genau so.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

#18
Zitat von: CoolTux am 28 Februar 2017, 13:06:15
Parsen ist Im Grunde einfach nur das auslesen nötiger Daten. Das kann man in Deinem Fall zum Beispiel mit mit grep machen und das Ergebnis als Variable zur Verfügung stellen.

Die Seite ist weiß aber der Quelltext sollte schon zu mindest den Header enthalten
Also meine Seite ist weiß und die Seite mit dem Quelltext auch  :-[

Was parsen als  Wort bedeutet war mir schon klar  :P ich wollte gerne eine Zeile Code  ;)

@Rudi Ja ok, mit curl geht es - habe ich jetzt herausgefunden. Das sich der Token jedesmal ändert war mir schon klar  ;)
Aber nicht einfach mit anhängen, sondern mit --datacurl --data 'fwcsrf=fhem_53905226430937.4' http://raspib:8083/fhem?cmd=set%20Aktor1%20off
Nur damit hier mal ein Beispiel für die Unwissenden steht  ;D

Die Sache mit dem "API WEB" ist sicher auch grundlegend ein guter und einfacher Gedanke. Ich werde dann mal etwas dazu ins Wiki stellen.

Jetzt muss ich nur noch parsen ...  8)

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

CoolTux

Versuche mal ohne das ?XHR=1 damit geht es auf jeden Fall. Hast dann dummer Weise natürlich auch mehr Inhalt. Vielelicht hat Rudi da noch eine Idee.

Das mit dem bash Script kann ich mir ja mal anschauen. Sollte nicht schwer sein, aber ich bräuchte dafür etwas mehr Ruhe. Wird also bisschen dauern.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

Muss man hier alles selber machen? :)

curl "http://localhost:8083/fhem?cmd=set%20Office%20on&XHR=1&fwcsrf="`curl -s -D - 'http://localhost:8083/fhem&XHR=1' | awk '/X-FHEM-csrfToken/{print $2}'`

War jetzt wirklich nicht so schwer. Getestet mit fhem.cfg.demo.

ZitatAber nicht einfach mit anhängen, sondern mit --data
FHEMWEB unterscheidet nicht zwischen POST (--data) und GET (URL) Parameter, man kann sogar mischen.

ZitatVersuche mal ohne das ?XHR=1 damit geht es auf jeden Fall.
Mit &XHR=1 geht es auch, s.o. In diesem fall muss man den Token aus dem HTTP-Header rausfischen, ohne XHR=1 steht es auch im body. Wie ich das oben schon geschrieben habe.

CoolTux

Zitat von: rudolfkoenig am 28 Februar 2017, 15:35:48
Muss man hier alles selber machen? :)

curl "http://localhost:8083/fhem?cmd=set%20Office%20on&XHR=1&fwcsrf="`curl -s -D - 'http://localhost:8083/fhem&XHR=1' | awk '/X-FHEM-csrfToken/{print $2}'`

War jetzt wirklich nicht so schwer. Getestet mit fhem.cfg.demo.
FHEMWEB unterscheidet nicht zwischen POST (--data) und GET (URL) Parameter, man kann sogar mischen.
Mit &XHR=1 geht es auch, s.o. In diesem fall muss man den Token aus dem HTTP-Header rausfischen, ohne XHR=1 steht es auch im body. Wie ich das oben schon geschrieben habe.

Oh man ich Honk. Stimmt ja, http Header steht ja nicht im File sondern ist Teil des Transportprotokolls. Danke Rudi für den Schups


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Ok, kaum fragt man die richtigen Leute - funktioniert es auch :)

also der Trick beim curl ist einfach: man braucht die "" um die URL. Liegt scheinbar am & - wusste ich nicht. Also so geht es:
curl "http://$host:8083/fhem?cmd=set%20$name%20$event&fwcsrf=fhem_3450307859263.46"

Und der Einzeiler um den Token zu lesen ist natürlich Spitze - danke. Wäre ich nie drauf gekommen.  :-[

Bei dem kompletten Einzeiler sagt er mir noch: curl: (3) Illegal characters found in URL
Das wird wohl an den `` liegen, kenne ich irgendwie. Da suche ich noch.

Danke und Grüße
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

Wuehler

Hallo,

ich habe dazu einigermaßen passend zwei Themen:
1. für die, die ebenfalls perl-Scripte per cron aufrufen und daraus per http://myfhem/fhem?cmd... Werte in fhem setzen ein Stück Perl-Code zur Extraktion eines csrf-Tokens.
2. An die Cracks eine Frage:
In meinem Script rufe ich den Schul-Vertretungsplan meiner Tochter ab (inkl. Login und Navigation auf der Seite). Per cron wird das script 3x am Tag aufgerufen (alternativ über die UI) . Zu Beginn hatte ich den Code in meiner myUtils. Wenn ich andere Forum-Threads richtig verstanden habe muss man dabei darauf achten, das es keine blocking-HTTP-Requests gibt, da fhem sonst "steht". Ist mein Ansatz so i.O. oder würdet ihr das anders lösen?



use strict;
use warnings;
use POSIX;
use Modern::Perl;
use HTML::TableExtract;
use WWW::Mechanize;
use LWP::Simple;
use URI::Escape;

my %data=parseVertretungsplanURL();

sub getCSRFToken{
  my $token="";
  my $content=get("http://myfhem/fhem");
  die "Couldn't get it!" unless defined $content;
  my $index1=index($content,"fwcsrf=")+8;
  my $index2=index($content,"'",$index1);
  $token=substr($content,$index1,$index2-$index1);
  #print "\ncontent: ".substr($content,$index1-12,$index2-($index1)+5)."\n";
  #print "\ntoken: ".$token."\n";
  return $token;
}

sub parseVertretungsplanURL{

  my $token=getCSRFToken;
  get("http://myfhem/fhem?cmd.dummy_Vertretungsplan=set%20dummy_Vertretungsplan%20doUpdate%20inProgress&fwcsrf=".$token);
  my ($mech) = WWW::Mechanize->new();

  $mech->get('https://infoseite.de/login/');
 
  .....
  # durch Seiten durchnavigieren und Daten auslesen
  .....
 
  #Daten in FHEM aktualisieren:
  get("http://myfhem/fhem?cmd.dummy_Vertretungsplan=set%20dummy_Vertretungsplan%20b_Info%20".uri_escape($infost)."&fwcsrf=".$token);
  ... 
  get("http://myfhem/fhem?cmd.dummy_Vertretungsplan=set%20dummy_Vertretungsplan%20doUpdate%20done"."&fwcsrf=".$token);
  return %AllData;
}

ManuZz

@CoolTux
ZitatKannst Du mir sagen in welcher Sprache Du die Seite gemacht hast? php oder statisches HTML? Wüsstest Du wie man mittels JavaScript zum Beispiel Seiteninhalt abruft und nach Inhalten durchsucht?
Wenn nicht, mach es einfach so. Erstelle eine WEBINSTANZ die Du nur für Deine Aufrufe über die Webseite verwendest. Schaue Dir hierfür mal etwas genauer das allow Modul an. Hier kannst Du zugriffe auf Befehlsebene oder gar Deviceebene machen. Gibt glaube auch(vorsicht geraten) ein allowFrom wo Du die IP der Geräte die darauf zugreifen dürfen eintragen kannst.

Ich hab ne html Seite - zu mehr bin ich nicht in der Lage. Hab heute probiert es auszulesen und einzusetzen aber ich bin nicht annähernd zum Erfolg gekommen. Ich nehme einfach die Fallback Möglichkeit auf Version 5.7. Hat gut funktioniert. Danke für die Mühe!

CoolTux

Zitat von: ManuZz am 03 März 2017, 18:26:18
@CoolTux
Ich hab ne html Seite - zu mehr bin ich nicht in der Lage. Hab heute probiert es auszulesen und einzusetzen aber ich bin nicht annähernd zum Erfolg gekommen. Ich nehme einfach die Fallback Möglichkeit auf Version 5.7. Hat gut funktioniert. Danke für die Mühe!

Bitte mach es Dir nicht zu einfach. Den Token gibt es nicht ohne Grund.
Dann erstelle Dir lieber eine extra Webinstanz. Sichere sie mit https und Passwort und schaue Dir an was Du mit dem Device allow passend zur Webinstanz alles einstellen kannst.



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

Oder csrfToken auf einen festen Wert setzen, und an dem FHEM Befehl &fwcsrf=festerWert ranhaengen.

CoolTux

Richtig. Ganz vergessen. Gibt auch einen festen Token. Danke Rudi.
So langsam schwirrt einen der Kopf von den ganzen Tokenkram   ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

ManuZz

ich hab die fhem Installation nun endgültig zerlegt - ich muss nun das raspberry erstmal neu aufsetzen da nichts mehr geht und ich die Reste nicht losbekomme. ich werde dan version 5.7 nehmen - da ich nicht weiß wie man ein festen token wert setzt - und das die Sicherheit auch nicht hebt. ich finde es schade das solche features eingeführt werden ohne eine doku dazu. aber es erleichtert mich das ich nicht der einzige bin der hier am raten ist.
ich update dann halt erst wenn es hier neues gibt das so einfach ist das ich es auch umsetzen kann - schade ist das die einfache Abschaltung nicht funktioniert.
Und ich war dumm das ich das changelog nicht gelesen habe - aber es ist kein zustand das mein licht nicht funktioniert, es war schön etwas gebastelt zu haben das gute 3 jahre funktionierte.
Aber nun habe ich wieder 2 Tage lang etwas zu tun.

Wuppi68

Zitat von: ManuZz am 03 März 2017, 20:17:58
ich hab die fhem Installation nun endgültig zerlegt - ich muss nun das raspberry erstmal neu aufsetzen da nichts mehr geht und ich die Reste nicht losbekomme. ich werde dan version 5.7 nehmen - da ich nicht weiß wie man ein festen token wert setzt - und das die Sicherheit auch nicht hebt. ich finde es schade das solche features eingeführt werden ohne eine doku dazu. aber es erleichtert mich das ich nicht der einzige bin der hier am raten ist.
ich update dann halt erst wenn es hier neues gibt das so einfach ist das ich es auch umsetzen kann - schade ist das die einfache Abschaltung nicht funktioniert.
Und ich war dumm das ich das changelog nicht gelesen habe - aber es ist kein zustand das mein licht nicht funktioniert, es war schön etwas gebastelt zu haben das gute 3 jahre funktionierte.
Aber nun habe ich wieder 2 Tage lang etwas zu tun.

gerade wenn Du sowieso alle Neu machen willst, dann würde ich auf jeden Fall auf die aktuelle "Technik" umsteigen, also neuestes Linux, neuestes FHEM ... sonst wirst Du die Probleme nur in die Zukunft verschieben und die Erfahrung zeigt es uns immer wieder - es kommt immer mehr dazu :-)

Aktuell ist es alles noch überschaubar - und wenn Du das CFSR in den Griff bekommen hast, wirst Du bestimmt die nächsten Dinge deutlich leichter angehen können

Bedenke: Wissen bringt mehr Wissen
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

ManuZz

Mag sein das es irgendwann unüberschaubar wird - aber nach dem neu aufsetzen werde ich einfach nichts mehr updaten. Es gibt dann nur Gründe dagegen. Ausserdem hat es jahrelang funktioniert. Und da ich kein Zugriff von aussen habe, gibt es auch keine Sicherheitsprobleme.
Ich wünsche euch trotzdem viel Spaß bei der Weiterentwicklung des fhem. Es ist nur schade das nicht an Menschen gedacht wird die das nicht beruflich machen, bzw keine Programmierer sind. Bis hierher war es immer easy zu nutzen. auch die Einbindung der Heizung war einfach. Dumm ist halt wenn man durch ein Sicherheitsfeature nichts mehr nutzen kann. und es auch keine richtige Anleitung gibt wie man es als noob nutzen kann, bzw die Abschaltung einfach nicht funktioniert.

CoolTux

Es kommt selten vor, aber ich gestehe. Ich bin sprachlos.


Grüße
Leon
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Zitat von: ManuZz am 03 März 2017, 20:48:00
Und da ich kein Zugriff von aussen habe, gibt es auch keine Sicherheitsprobleme.
Doch die gibt es, Du hast es bloß nicht verstanden.  :-X

Gerade jetzt, Wenn Du dies liest und im zweiten Tab dein FHEM offen hast.

Schönes Leben noch
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

ManuZz

Was nicht vorkommt, ausser ich versuche mit neuen Features klarzukommen. Da ich dies nun aber aufgebe und die Funktionen über eine Html Seite steuere, scheint alles gut zu sein. Bisher hat mein fhem noch keiner gehackt... halte ich auch für sehr unwahrscheinlich.
Aber ist ja schön zu hören wie ihr alle gut damit zurechtkommt. Muss ja auch kein normaler Mensch nutzen können.

Otto123

Hallo ManuZz,

"Vogel Strauss" Systeme kenne ich zur Genüge, die bringen auf Dauer auch nicht den gewünschten "Frieden".

Warum Du Dir dein System "zerbastelt" hast lag bestimmt nicht am Update. Zumal Du auch ganz einfach hättest zurück gehen können.
Jetzt mit neu aufgesetztem System könntest Du auch ganz einfach trotz Version 5.8 vorübergehend auf featurelevel 5.7 schalten und die Zeit nutzen um Dir Wissen anzueignen.

Aber irgendwie wolltest Du ja alle Ideen zur Hilfe nicht wirklich.

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

Otto123

Zitat von: rudolfkoenig am 28 Februar 2017, 15:35:48
Muss man hier alles selber machen? :)

curl "http://localhost:8083/fhem?cmd=set%20Office%20on&XHR=1&fwcsrf="`curl -s -D - 'http://localhost:8083/fhem&XHR=1' | awk '/X-FHEM-csrfToken/{print $2}'`

noch mal zurück zum Thema. Ich versuche eigentlich mehrere Schritte zur "Problembewältigung" beim Nichtprogrammierer auszuarbeiten und in einen Wiki Artikel zu schreiben. Mir fehlt aber offenbar etwas an Wissen. Rudis Einzeiler bekomme ich so nicht hin. Es kommt zu unterschiedlichsten Fehlermeldungen, ich habe das Gefühl, das System gerät dabei scheinbar in unterschiedliche Zustände. Aber ziemlich stabil kommt bei der Verknüpfung der url "nach Rudi" die Ausschrift:
curl: (3) Illegal characters found in URL
Obwohl es, wenn ich den String mit echo ausgebe gut aussieht ->
curl http://raspib:8083/fhem?cmd=set%20Aktor1%20on&XHR=1&fwcsrf=fhem_36945614191211.9
Diese Zeile dann wiederum ausgeführt bringt wechselnde Ausgaben in der Art:
pi@raspib3:~ $ curl http://raspib:8083/fhem?cmd=set%20Aktor1%20on&XHR=1&fwcsrf=fhem_36945614191211.9
[1] 26947
[2] 26948

Die einzige Variante die bei mir als Einzeiler geht ist die folgende, mit separater Übergabe des Tokens über --data :
curl --data "fwcsrf=$(curl -s -D - 'http://localhost:8083/fhem&XHR=1' | awk '/X-FHEM-csrfToken/{print $2}')" http://localhost:8083/fhem?cmd=set%20Office%20on

Diese könnte man in Scripten dann so verwenden, um bei mehreren Befehlen nicht jedes Mal den Token neu auszulesen:
token=$(curl -s -D - 'http://<host>:8083/fhem&XHR=1' | awk '/X-FHEM-csrfToken/{print $2}')
curl --data "fwcsrf=$token" http://<host>:8083/fhem?cmd=set%20Aktor1%20off

Soll ich das so in die Anleitung aufnehmen?

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

Christoph Morrison

Zitat von: Otto123 am 04 März 2017, 17:56:52
noch mal zurück zum Thema. Ich versuche eigentlich mehrere Schritte zur "Problembewältigung" beim Nichtprogrammierer auszuarbeiten und in einen Wiki Artikel zu schreiben. Mir fehlt aber offenbar etwas an Wissen. Rudis Einzeiler bekomme ich so nicht hin. Es kommt zu unterschiedlichsten Fehlermeldungen, ich habe das Gefühl, das System gerät dabei scheinbar in unterschiedliche Zustände. Aber ziemlich stabil kommt bei der Verknüpfung der url "nach Rudi" die Ausschrift:
curl: (3) Illegal characters found in URL
Obwohl es, wenn ich den String mit echo ausgebe gut aussieht ->
curl http://raspib:8083/fhem?cmd=set%20Aktor1%20on&XHR=1&fwcsrf=fhem_36945614191211.9

Bei HTTP-Header-Feldern hängt immer CR (carriage return) LF (line feed) an. Deshalb sieht die Ausgabe zwar gut aus, aber übernimmt man Rudis Statement so, hängt man das CRSF-Token + CR + LF an den cURL-Aufruf an:

$ curl -s -D - 'http://fhem.example.org:8083/fhem&XHR=1' | awk '/X-FHEM-csrfToken/{print $2}' | od -c
0000000    c   s   r   f   _   1   5   9   3   0   5   1   6   3   7   5
0000020    3   9   7   7  \r  \n
0000026


Das hier funktioniert als Einzeiler:
curl "http://fhem.example.org:8083/fhem?cmd=set%20Office%20on&XHR=1&fwcsrf="`curl -s -D - 'http://fhem.example.org:8083/fhem&XHR=1' | awk '/X-FHEM-csrfToken/{print $2}' | tr -d "\r\n"`

Otto123

Danke Dir, sowas in der Art hatte ich auch gelesen, wusste als "Linux Schwacher" aber nicht wie man damit umgehen kann :)
| tr -d "\r\n"

Ok noch eine Frage: Ich wollte die Einrichtung eines API Webs Step by Step beschreiben, dabei ist mir aufgefallen: Wenn man in der Oberfläche ganz brav auf
attr <WEb Name> csrfToken geht und dort none reinschreibt und dann auf den attr Knopf drückt macht es wusch und man hat einen weißes Browser Fenster.
Nach zurück im Browser ist auch kein Eintrag passiert.
Ist das ein Sicherheitsfeature oder eine Bug?
Wenn man in der Kommandozeile attr WEBapi csrfToken none eingibt funktioniert alles wie gewünscht. Bei jedem definiertem WEB :)

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

JoWiemann

Rudolf hat heute einen Fehler gefixt der auftrat, wenn das Web nicht Web hieß.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Christoph Morrison

Zitat von: Otto123 am 04 März 2017, 18:39:09
Ok noch eine Frage: Ich wollte die Einrichtung eines API Webs Step by Step beschreiben, dabei ist mir aufgefallen: Wenn man in der Oberfläche ganz brav auf
attr <WEb Name> csrfToken geht und dort none reinschreibt und dann auf den attr Knopf drückt macht es wusch und man hat einen weißes Browser Fenster.
Nach zurück im Browser ist auch kein Eintrag passiert.
Ist das ein Sicherheitsfeature oder eine Bug?
Wenn man in der Kommandozeile attr WEBapi csrfToken none eingibt funktioniert alles wie gewünscht. Bei jedem definiertem WEB :)

Konnte ich eben mit brandaktuellem FHEM nicht reproduzieren.

Otto123

Coole Sache, tritt bei mir auch nicht mehr auf. Ich schwöre ich habe es an einem relativ kleinem Testsystem gehabt und habe gerade noch update gemacht (es trat vor und nach dem Update auf)
Und jetzt nicht mehr!  :-[
Ich schwöre ich habe noch nichts getrunken.

Naja gut, dann streichen wir das.

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

Otto123

So ich habe es jetzt einfach mal gemacht -> https://wiki.fhem.de/wiki/CsrfToken-HowTo
Jetzt könnt ihr mich hauen  8)

Das dünnste Brett steht ganz unten  :-X ich hoffe diese kurze Zusammenfassung ist im Sinne der Entwickler. Ich bin für jede Kritik dankbar!

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

CoolTux

Das mit dem FeatureLevel zurück drehen würde ich raus nehmen. Ist zu da es ja nur um den CSRF Token geht.
An sonsten wie immer saubere Arbeit Otto. Danke Dir. Eventuell findet sich noch der ein oder andere der ergänzen möchte.



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Fällt mir gerade ein. Fester Token geht ja auch. Könnte man noch erwähnen  :)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Zitat von: CoolTux am 04 März 2017, 20:01:29
Fällt mir gerade ein. Fester Token geht ja auch. Könnte man noch erwähnen  :)
Ja könnte man, aber macht es praktisch gesehen Sinn? Man müsste die URL auch ändern, man würde sich das Auslesen sparen. Aber ohne Eingriff bringt das nichts.

Ja das mit dem Featurelevel ist eigentlich ein anderes Thema, aber da macht man keinen Eingriff in der Definition des FHEMWEB. Und es ist vielleicht für den Ottonormal Nutzer am wenigsten suspect. Ich habe update gemacht, es geht was nicht, ich dreh schnell den Featurelevel zurück und muss kein restore machen.
Zeit zum lesen und nachdenken.

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

CoolTux

Eine andere Idee wäre noch eine eigene Wikiseite zum Thema FHEMWEB sicherer machen und da drunter dann das was du geschrieben hast. Dann macht auch die Sachen mit webapi oder webhook oder wie man das Kind auch nennen mag. Ausserdem Beispiele für allow. Angefangen von allowfrom bis hin zu allowCmd. Ist jetzt nur so spontan eine Idee. Sitze halt gerade wo wo einem so Ideen kommen  ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

JoWiemann

Also bei mir kommt das SmartPhone nicht mit zum Königsörtchen, oder wo ist wo bei Dir  ;D

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

CoolTux

Genau da. Tablet im Bad. Kein Smartphone
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Benni

Das mit dem festen csrfToken würde ich auf jeden Fall noch einbauen. Ist vom Handling fast so einfach, wie none, da man damit auch statische Links bauen kann. Ist aber auf jeden Fall schon mal sicherer, als none.

Und im ersten Einzeiler im Wiki-Artikel fehlt am Ende das String-Abschußzeichen:


curl -s -D - 'http://localhost:8083/fhem&XHR=1' | awk '/X-FHEM-csrfToken/{print $2}'

Otto123

Ich habe das mit dem festen Token eingebaut und den Fehler korrigiert.

Weiß jemand ob meine Definition des Tokens stimmt? Gibt es Einschränkungen in Zeichen und Länge?

Mit dem Titel des Artikel habe ich ne Weile gehadert, die Idee mit FHEMWEB sicherer machen ist auch nicht schlecht. Für dieses Thema finde ich mich noch nicht fit genug, aber ich bin ja lernfähig. Und es gibt ja noch andere Autoren  ;)

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

Christoph Morrison

Noch ein kleiner Hinweis:
curl -s -D - 'http://localhost:8083/fhem&XHR=1' | awk '/X-FHEM-csrfToken/{print $2}'

solllte

curl -s -D - 'http://localhost:8083/fhem?XHR=1' | awk '/X-FHEM-csrfToken/{print $2}'

sein. Der Query-String sollte durch ein Fragezeichen vom abs_path getrennt sein.

--data sollte auch eher --data-raw sein, falls jemand auf die glorreiche Idee kommt, ein festes CSRF-Token zu setzen (und zu schicken) das mit @ oder - beginnt.

Ich würde mir auch überlegen, den tr-Aufruf aus meinem Beispiel einzubauen. Wenn jemand den Code aus dem zweiten Code-Block verwendet um einen GET-Request zu machen (--data impliziert POST), stirbt cURL mit Fehler Nr. 3: Illegal characters found in URL

Wuppi68

und noch ein Tip an Otto123

wenn in einer Shellzeile Sonderzeichen vorkommen müssen diese escaped werden ....

& schickt den Prozess in den Hintergrund ... \& ist es dann escaped und von den & gibt es noch viel mehr ;-)
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

Christoph Morrison

Zitat von: Wuppi68 am 04 März 2017, 23:02:47
und noch ein Tip an Otto123

wenn in einer Shellzeile Sonderzeichen vorkommen müssen diese escaped werden ....

& schickt den Prozess in den Hintergrund ... \& ist es dann escaped und von den & gibt es noch viel mehr ;-)

Auf der Wikiseite sind doch alle & in Quotes. Oder übersehe ich was? Dann wird die Shell den Prozess auch nicht in den Hintergrund schicken.

Otto123

Kaum schreibt man konkrete Sachen auf, kommen auch konkrete Hinweise  8)

Dein Beispiel wollte ich sowie noch ergänzen  ;) Ich musste mich erstmal um die Formatierung kümmern. Damit nicht alles als Link dargestellt wird.

Die Sache mit dem Fragezeichen: Da ist das was zurück geliefert wird stark unterschiedlich, also mit &XHR=1 wird irgendwie alles in verkürzter Form geliefert(genau genommen Content-Length: 0).
Der Token ist im Header aber immer enthalten.

Ich habe raus gefunden das XHR für xmlhttprequest steht, der Rest ob jetzt & oder ? richtiger/besser ist, erschließt sich mir nicht.

Wenn mit & der unnötige Inhalt der Seite unterdrückt wird, sähe ich dies als Vorteil.

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

Christoph Morrison

#54
Zitat von: Otto123 am 04 März 2017, 23:12:41
Die Sache mit dem Fragezeichen: Da ist das was zurück geliefert wird stark unterschiedlich, also mit &XHR=1 wird irgendwie alles in verkürzter Form geliefert(genau genommen Content-Length: 0).
Der Token ist im Header aber immer enthalten.

Ich habe raus gefunden das XHR für xmlhttprequest steht, der Rest ob jetzt & oder ? richtiger/besser ist, erschließt sich mir nicht.

? ist gemäß RFC2616 Section 3 richtig. & trennt Key-Value-Paare im Query String ab, leitet aber nicht den Query String ein. Sowas macht gerne bei WAF (nein, nicht bei den Weibern, Web Application Firewalls) Ärger.

ZitatWenn mit & der unnötige Inhalt der Seite unterdrückt wird, sähe ich dies als Vorteil.

FHEM macht keinen Unterschied zwischen ? und &; bei beiden kommt Content-Length=0 zurück. Aber ggf. Middleware wie ein Apache Reverse Proxy oder eine WAF. Und entspricht nicht dem Standard, den man einhalten sollte.

Otto123

Ja irgendwie hast Du Recht, ich hatte vorhin einen Test da war das anders. Jetzt nicht mehr.  :-X

BTW Vorhin hatte ich, anderer Rechner damit "anderer" Browser, den Effekt mit "wusch und weiße Seite" bei attr csrfToken nochmal.
Eventuell habe ich einen Pumuckel in der Leitung.  :o

Also ändere ich jetzt noch &XHR=1 in ?XHR=1 und geh dann ins Bett  :D

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

Otto123

#56
Moin,

gerade festgestellt, dass mit Token auf festen Wert setzen funktioniert nicht -> https://forum.fhem.de/index.php/topic,68291.msg599326.html#msg599326
Der Token wird nach einem neustart wieder von FHEM erzeugt, der gesetzte Wert wird ignoriert.
Zumindest bei dem Standard WEB 8083

Bei meinem selbst definiertem WEB und beim WEBphone 8084 und WEBtablet 8085  funktioniert der feste Token.
Ist das so gewollt?

BTW: ich habe immer mal wieder den Effekt, dass die Seite weiß wird wenn ich den attr Knopf für csrfToken drücke. Ich kann noch nicht klar sagen wie es dann verschwindet. Ich kann zumindest in diesem Moment oben in der Browser Zeile das WEB wechseln (von 8083 auf 8084 gehen) dann funktioniert es. Wieder zurück gewechselt funktioniert das dann auch.

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

Benni

#57
Das sollte aber laut Commandref so funktionieren. Falls nicht müsste man ggf. mal Rudi darauf aufmerksam machen. Ich würde es in dem Fall als Bug bezeichnen.

Zitat von: Commandref#FHEMWEB
csrfToken
Falls gesetzt, wird der Wert des Attributes als fwcsrf Parameter bei jedem über FHEMWEB abgesetzten Kommando verlangt, es dient zum Schutz von Cross Site Resource Forgery Angriffen. Falls der Wert random ist, dann wird ein Zufallswert beim jeden FHEMWEB Start neu generiert, falls er none ist, dann wird kein Parameter verlangt. Default ist random für featurelevel 5.8 und größer, und none für featurelevel kleiner 5.8

In einem anderen Thread hat Rudi das feste Setzen ebenfalls als Möglichkeit aufgeführt: Ich kann ihn nur auf die Schnelle leider nicht finden

Zitat von: rudolfkoenig am 04 März 2017, 09:18:28
Das angezeigte Token csrf_429984230293756 kann nur entstehen, wenn man csrfToken nicht definiert hat, auf random oder genau diesen Wert gesetzt hat. Mit none wird sie nicht gesetzt und nicht geprueft. Habs gerade nochmal getestet.

rudolfkoenig

Ich habe es gerade getestet mit "attr WEB2 csrfToken testing", es funktioniert, auch nach restart, auch mit WEB als Name. Bitte prueft, dass ihr einen aktuellen FHEM benutzt.

Otto123

Ich habe:
Latest Revision: 13597

File              Rev   Last Change

fhem.pl           13593 2017-03-04 07:53:44Z rudolfkoenig
98_ArduCounter.pm 13487 2017-02-22 18:31:47Z StefanStrobel
98_autocreate.pm  11984 2016-08-19 12:47:50Z rudolfkoenig
98_DOIF.pm        13505 2017-02-24 17:17:06Z Damian
98_dummy.pm       12700 2016-12-02 16:49:42Z rudolfkoenig
91_eventTypes.pm  11984 2016-08-19 12:47:50Z rudolfkoenig
01_FHEMWEB.pm     13585 2017-03-03 08:26:40Z rudolfkoenig
92_FileLog.pm     13565 2017-03-01 15:54:06Z rudolfkoenig
91_notify.pm      13455 2017-02-19 17:44:25Z rudolfkoenig
73_PRESENCE.pm    13159 2017-01-20 21:33:39Z markusbloch
98_structure.pm   13485 2017-02-22 07:44:54Z rudolfkoenig
99_SUNRISE_EL.pm  12485 2016-11-01 15:18:51Z rudolfkoenig
98_telnet.pm      13443 2017-02-19 12:51:22Z rudolfkoenig
98_Text2Speech.pm 13351 2017-02-07 09:46:11Z Tobias.Faust
99_Utils.pm       13259 2017-01-28 17:39:39Z rudolfkoenig
98_version.pm     11987 2016-08-19 17:13:41Z markusbloch

Blocking.pm       12648 2016-11-24 12:15:25Z rudolfkoenig
DevIo.pm          12716 2016-12-05 09:11:31Z rudolfkoenig
HttpUtils.pm      13475 2017-02-20 19:33:48Z rudolfkoenig
Info.pm              28 2008-11-09 01:08:44Z dsully
RTypes.pm         10476 2016-01-12 21:03:33Z borisneubert
SetExtensions.pm  12935 2017-01-02 19:51:46Z rudolfkoenig
TcpServerUtils.pm 11908 2016-08-06 15:09:55Z rudolfkoenig

fhemweb.js                 13590 2017-03-03 18:32:12Z rudolfkoenig
fhemweb_colorpicker.js     13580 2017-03-02 13:03:29Z justme1968
fhemweb_readingsGroup.js   13580 2017-03-02 13:03:29Z justme1968
fhemweb_readingsHistory.js 13580 2017-03-02 13:03:29Z justme1968
fhemweb_uzsu.js            13580 2017-03-02 13:03:29Z justme1968

Und das Verhalten tritt nicht bei einem selbst definiertem WEB auf, sondern nur beim Standard WEB 8083!

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

Benni

#60
Ich hab's eben auch schnell getestet, allerdings nur mit einem selbst definierten FHEMWEB-Device, nicht mit dem Standard-Device und dort hat es funktioniert, wie erwartet.

Allerdings hatte ich dabei auch das von Otto schon mal beschriebene Problem, dass ich beim setzen mittels Attribut-"Assistent" in der FHEMWEB-Device-Detailansicht (also nicht über die FHEMWEB-Kommandozeile) *zack* auf einer leeren (weißen) Seite gleandet bin und das Attribut nicht gesetzt wurde.

Letztes Update war vor 2 Stunden ;)

Update: Bei mir funktioniert es auch mit dem Standard-FHEMWEB-Device WEB auf 8083!
@Otto: Save vergessen?

Benni

#61
@Rudi: Kann man das Neu-Erzeugen des csrfToken auch zur Laufzeit irgendwie anstoßen, ohne FHEM neu zu starten?

Edit: Wenn ich das Attribut lösche passierte erst mal nichts, bzw. wird das CSRF-Token sogar erst mal komplett gelöscht. Wenn ich es dann explizit auf random setze, wird wieder eines generiert.

rudolfkoenig

@Otto:
Zitat01_FHEMWEB.pm     13585 2017-03-03 08:26:40Z rudolfkoenig
Ist nicht aktuell.
ZitatUnd das Verhalten tritt nicht bei einem selbst definiertem WEB auf, sondern nur beim Standard WEB 8083!
Bitte sei hier genau. Ich habe gestern einen Bug gefixt, der bei nicht gesetzten csrfToken das nur fuer die FHEMWEB Instanz mit dem Namen WEB gesetzt hat.

@Benni:
Bin verwirrt. Tut es jetzt oder nicht? Ich habe kein Problem csrfToken in der FHEMWEB Detail Ansicht in der attr Zeile zu setzen.

ZitatKann man das Neu-Erzeugen des csrfToken auch zur Laufzeit irgendwie anstoßen, ohne FHEM neu zu starten?
Wenn man es auf "random" setzt, dann wird ein neuer Token generiert. Danach funktioniert zwar einiges immer noch (alle Links ohne cmd und alle set/get/attr Knoepfe, da sie im Fehlerfall csrfToken neu holen), aber die Links mit cmd drin (Edit files, Select style, Event monitor) nicht, deswegen empfehle ich nach sowas ein Reload der Seite im Browser. Duerfte selten vorkommen, will es deswegen nicht programmatisch behandeln.

Benni

Rudi,

bei mir funktioniert es mit allen FHEMWEB-Instanzen, so wie erwartet und wie von dir Dokumentiert.

Otto123

Hallo Rudi,

ich dachte update von gestern ist aktuell und Du machst am WE frei  ;D
Alles gut mit der Version ->  01_FHEMWEB.pm     13599 2017-03-04 13:38:24Z rudolfkoenig funktioniert alles wie dokumentiert  :)

@Benni ich bin sehr froh das Du den Effekt auch hattest. Ich habe gestern gedacht mein Pumuckel  treibt arg Schabernack mit  mir. Ich hatte so viel unterschiedliche Effekte, irgendwann ist man nicht mehr sicher ob man nicht doch halluziniert.  :D

Ich hatte wie gesagt gestern früh update gemacht und dachte damit ist alles gut. Ja, und save hatte ich durchaus auch schon mal vergessen aber nicht heute früh. Nur update hatte ich heute früh "vergessen".  :-X

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

Otto123

Mir ist noch folgendes Verhalten aufgefallen, das soll aber weder Kritik oder Feature Request sein.

Man kann sich eigentlich (mit einer Ausnahme) auf das csrfToken verlassen was man nach einem Refresh in der Detailansicht des WEBs sieht.

Ausgangszustand:
attr nicht gesetzt - nach neustart FHEM -> zufälliges Token steht in den Internals und wird auch verwendet
attr auf <Wert> gesetzt -> das Token mit dem festen Wert wird sofort  in den Internals angezeigt und auch verwendet
attr auf none gesetzt -> attr wird angezeigt, die Anzeige der Internals ändert sich nicht (Token steht noch drin) es wird aber kein csrfToken verwendet
attr gelöscht -> es wird kein attr und kein Internal angezeigt (auch nach Browser Refresh nicht) und kein csrfToken verwendet
attr auf random gesetzt -> es wird das Token sofort in den Internals angezeigt und sofort verwendet.

Aus meiner Sicht zwei ganz leicht inkonsistente Zustände:
Wenn man nach Versuchen den "Original Zustand" wieder herstellt und das Attribute löscht wird das zufällige Token erst nach einem shutdown restart wieder verwendet.
Setzt man auf none wird kein Anzeigerefresh in den Internals durchgeführt.

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

Benni

#66
Otto,

ich kann den Pumuckl sogar reproduzieren  ;D

Wenn ich von meiner Standard-FHEMWEB-Instanz (WEB auf 8083) aus das csrfToken einer anderen FHEMWEB-Instanz mittels "attr"-Button im Device-Detail der anderen FHEMWEB-Instanz (WEBTEXT)  auf einen festen Wert (bspw. benni_1234567) setzen will, dann tritt der Wusch-Effekt der weißen, leeren Seite auf, also Ottos s.g. "Pumuckel" ;).
Das ist bei mir zuverlässig reproduzierbar.

Wenn ich dazu den Console-Log im Browser (btw. ich verwende Chrome) offen habe erhalte ich dabei folgende Ausgabe (s. Screenshot im Anhang)

Gleichzeitig erhalte ich im FHEM-Log folgenden Eintrag:


2017.03.05 18:49:01 3: FHEMWEB WEB CSRF error:  ne csrf_295575378963423. For detals see the csrfToken FHEMWEB attribute


Der darin genannte Token ist der korrekte Token meiner Standard FHEMWEB-Instanz:


Internals:
   CFGFN
   CONNECTS   210
   CSRFTOKEN  csrf_295575378963423
   DEF        8083 global
   FD         5
   NAME       WEB
   NR         3
   NTFY_ORDER 50-WEB
   PORT       8083
   STATE      Initialized
   TYPE       FHEMWEB


Da läuft wohl irgendwas mit den Tokens ziwschen den FHEMWEB-Instanzen schief.


Otto123

#67
Benni! exakt so ist es!

Aber:

nur wenn in der anderen Webinstanz nach einem Neustart noch kein attr csrfToken gesetzt war. Ich bekomme den Fehler
2017.03.05 19:04:54 3: FHEMWEB WEB CSRF error: csrf_21502981895379 ne csrf_214810837363824. For detals see the csrfToken FHEMWEB attribute

Mein WEB 8083 lief auf zufälligen csrfToken und mein WEBfest 8089 zu diesem Zeitpunkt auch.

Wenn man es einmal gesetzt hatte, dann tritt der Effekt nie wieder auf. Bis man das attr löscht, save macht  ;), neu startet und wieder versucht vom WEB 1 aus im WEB 2 das attr NEU zu setzen.


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

Benni

Zitat von: Otto123 am 05 März 2017, 19:08:38
nur wenn in der anderen Webinstanz nach einem Neustart noch kein attr csrfToken gesetzt war.

Es scheint bei mir keine Rolle zu Spielen, wie das beim Systemstart gesetzt ist.

rudolfkoenig

ZitatWenn man nach Versuchen den "Original Zustand" wieder herstellt und das Attribute löscht wird das zufällige Token erst nach einem shutdown restart wieder verwendet.
Das habe ich gerade gefixt.

ZitatSetzt man auf none wird kein Anzeigerefresh in den Internals durchgeführt.
Das hat mit der Unvollkommenheit der fhemweb XHR Handling zu tun: fhemweb.js laedt die Seite nicht neu, wenn er meint, das gerade Geaenderte wird per longpoll eh gemeldet. Aenderungen an Internals werden aber nicht gemeldet.

Wenn ich wg. dem "Pumuckl" was machen soll, dann meldet euch nochmal mit einer Beschreibung, was ich auch verstehe :)

Benni

@Rudi:

Zur Reproduktion brauchst 2 FHEMWEB-Instanzen:


  • "WEB" auf Port 8083 mit csrfToken auf Random (Attribut csrf-Token nicht gesetzt bei Featurelevel 5.8 )
  • "WEBTEXT" auf beliebigem Port (bei mir auf 8093), ebenfalls ohne gesetztes Attribut csrfToken

Du öffnest im Browser die FHEMWEB-Instanz "WEB" auf Port 8083 und öffnest darin die Detail-Ansicht des FHEMWEB-Device "WEBTEXT"

Du stellst das Attribut csrfToken auf einen fixen Wert ein, aber nicht per FHEMWEB-Kommandozeile, sondern über den Attribut-"Assistenten" (s. Screenshot)

Beim Klick auf den "attr"-Button passiert's dann.

Reicht das als Beschreibung?



rudolfkoenig

ZitatReicht das als Beschreibung?
Ja. Das Problem hat nichts mit csrfToken zu tun gehabt, man hat es wohl nur deswegen gemerkt.
Der Bug ist stolze 4.5 Jahre alt. Habs gefixt & eingecheckt.

Benni

Zitat von: rudolfkoenig am 05 März 2017, 23:25:12
Der Bug ist stolze 4.5 Jahre alt.

Dann kennen wir ja nun auch Pumuckls Alter ;D

Otto123

Guten Morgen,

dann ist der Bug ja älter als Rudis Account hier im Forum. Somit wurde an historischen "Originaldokumenten" gefixt?
Wann hat FHEM eigentlich Geburtstag?

;D

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

rudolfkoenig


Otto123

Hallo,

ich habe da aktuell ein Problem. Mein damals getesteter Code curl "http://fhem.example.org:8083/fhem?cmd=set%20Office%20on?XHR=1&fwcsrf="`curl -s -D - 'http://fhem.example.org:8083/fhem?XHR=1' | awk '/X-FHEM-csrfToken/{print $2}' | tr -d "\r\n"`
Wurde jetzt quasi aktuell zu Recht bemängelt. Damit wird Office auf on?XHR=1 gesetzt anstatt auf on.
Wenn man das damals diskutierte, mit RFC begründete und von mir getestete ? gegen ein & ersetzt, funktioniert es wieder.curl "http://fhem.example.org:8083/fhem?cmd=set%20Office%20on&XHR=1&fwcsrf="`curl -s -D - 'http://fhem.example.org:8083/fhem?XHR=1' | awk '/X-FHEM-csrfToken/{print $2}' | tr -d "\r\n"`

Hat sich bei FHEMWEB was geändert?
Liegt es am neuen raspbian?

Ich kann leider nicht wirklich sagen, was richtig und was falsch ist. Ich wollte es nur nachvollziehbar aufschreiben.
Mir ist dann gleich noch aufgefallen, dass das damals empfohlene --data-raw beim curl im raspbian nicht existiert.
Zitat-d, --data DATA     HTTP POST data (H)
     --data-ascii DATA  HTTP POST ASCII data (H)
     --data-binary DATA  HTTP POST binary data (H)
     --data-urlencode DATA  HTTP POST data url encoded (H)

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

rudolfkoenig

ZitatWenn man das damals diskutierte, mit RFC begründete und von mir getestete ? gegen ein & ersetzt, funktioniert es wieder.
Ich bin noch auf dem Stand, dass fuer CGI ? den Pfad von den Argumenten trennt, und Argumente trennt man mit &. Ich kann aus dem verlinkten RFC nicht rauslesen, dass ? auch als Argument-Trenner empfohlen ist. Ich habe in FHEMWEB den Parser (FW_digestCgi) mit diesem Wissen gebaut und es seitdem (2007-12-31, r141) nicht geaendert, siehe svn blame & svn log. Falls ich mich irre, bitte korrigiert mich.

Christoph Morrison

#77
Das cURL in Wheezy ist 7.26.0-1+wheezy22, das in Stretch ist 7.52.1-5+deb9u2. --data-raw wurde erst mit 7.43.0 in cURL aufgenommen. Ein aktuelles cURL sollte also auch --data-raw unterstützen.

ZitatWenn man das damals diskutierte, mit RFC begründete und von mir getestete ? gegen ein & ersetzt, funktioniert es wieder.

Da hattest du mich damals aber missverstanden: In einer gültigen URL gibt es genau einen möglichen Platz für ein ?: Zwischen Pfad und Argumenten. So steht's im RFC:
Zitathttp_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]


Otto123

Gut dann habe ich den hier https://forum.fhem.de/index.php/topic,68133.msg599120.html#msg599120 gründlich missverstanden.
curl war zumindest damals noch im raspbian auf einer Version 7.38 und ist es heute immer noch. Somit ist dieser Code fürs Wiki unbrauchbar.

Ich habe das im Wiki korrigiert.

Dann habe ich offenbar dieses Missverständnis damals nicht nochmal explizit geprüft und einfach noch final in den Text übernommen. Das ist blöd. Das es bis heute (also im letzten halben Jahr) keiner gemerkt hat oder sich gemeldet hat ist auch blöd.

Ich gebe ne Runde Popcorn aus  ;D

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

Christoph Morrison

Zitat von: Otto123 am 28 November 2017, 21:57:00
Dann habe ich offenbar dieses Missverständnis damals nicht nochmal explizit geprüft und einfach noch final in den Text übernommen. Das ist blöd. Das es bis heute (also im letzten halben Jahr) keiner gemerkt hat oder sich gemeldet hat ist auch blöd.

Ja ich hatte halt gedacht, dass du das korrigierst und nie wieder ins Wiki geguckt. ¯\_(ツ)_/¯