FHEMWEB WEB CSRF error

Begonnen von HCS, 18 Februar 2017, 20:45:44

Vorheriges Thema - Nächstes Thema

sinus61

Ok, ich hab es. Tatsächlich wartet hier auf 2 Tablets mit Ftui ein Widget auf dieses Event und produziert dann den Fehler. Wenn eventOnThreshold nicht gesetzt ist passiert da eben auch nichts.

Schlimbo

Hallo zusammen,
muss hier noch mal fragen:
Zitat von: Schlimbo am 20 Februar 2017, 21:36:46
Um den CSRF Token zu bekommen führe ich jetzt eine HTTP GET aus.
Aus der Antwort suche ich mir im Header die Zeile X-FHEM-csrfToken: fhem_xxxxxxxxxxx heraus und Speicher den Token in eine Variable.
Mit meiner Variante um den Token zu bekommen, wird der erste Aufruf ja immer abgewiesen, weil er ohne Token durchgeführt wird.
Dadurch bekomme ich dann logischerweise einen Log Eintrag:
FHEMWEB WEB CSRF error:  ne fhem_492xxxxxxxxx. For detals see the csrfToken FHEMWEB attribute
Gibt es noch einen anderen/eleganteren weg um an den Token zu kommen,  ohne Log Eintrag?

Gruß Schlimbo

CoolTux

Du könntest einen festen Token vergeben.
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

Schlimbo

Ja, das hatten wir im andern Thread ja schon mal.
Seh das aber auch wie Betateilchen:
Zitat von: betateilchen am 21 Februar 2017, 11:52:29
Ein Token fest vorzugeben macht für mich eigentlich keinen Sinn, dann kann man es auch gleich abschalten.
Würde den random Token schon am liebsten weitere nutzen.
Schön wäre eine URL, die nur den Token zurück liefert ohne Log Eintrag.
zum Beispiele so etwas:
http://<fhemIP>:8083/fhem?cmd=xmllist%20getcsrfToken%20&XHR=1
Weiß natürlichen nicht ob es möglich ist so etwas zu implementieren!?

rudolfkoenig

Hole irgendetwas ohne cmd= von FHEM ab, z.Bsp. die Einstiegsseite.

CoolTux

Zitat von: rudolfkoenig am 24 Februar 2017, 19:38:19
Hole irgendetwas ohne cmd= von FHEM ab, z.Bsp. die Einstiegsseite.

Stimmt das hattest Du ja in dem anderen Thread vor paar Tagen auch erwähnt. Man(n) wird halt alt  ???
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

Schlimbo

Danke für den Tipp.
Denke dann ist folgender Aufruf am besten geeignet:
http://<fhemIP>:8083/fhem?XHR=1
Die Antwort soll ja schnellstmöglich ankommen (wenig Datenübertragung).
Durch XHR=1 wird ja dann wirklich nur der Header übertragen.

Ralf W.

#22
Hallo,

wenn "Commandref" aus FHEM aufgerufen wird, dann funktionieren einige Einträge (z.B. attr) und andere nicht (z.B. fheminfo) und im Log erscheint dieser CSRF error.

Einfach ein paar Tage warten?

MfG

PS: Und "Komplette Doku laden" überschwemmt das Log mit Fehlermeldungen.
http://twitter.com/RWausD
Schon gewusst, dass Haarausfall zu einer Glatze führen kann?

FHEM: NUC7PJYH2, Ubuntu Server 22.04.2 LTS, HMCCU - RaspberryMatic, DE ConBee II, diverse Sensoren und Aktoren.

rudolfkoenig

ZitatEinfach ein paar Tage warten?
Jenachdem, bis morgen, oder es hilft nicht.

Zur Klarstellung:
- das Problem tritt auf, wenn man im Browser die modular-Version der Seite laedt (attr global commandref modular), FHEM neu startet, und danach ohne reload oder nach einfachem reload  (Ctrl-R) die Seite neu laedt. Nach einem "kompletten" reload (Shift-Ctrl-R) funktioniert es.
- da nach einem FHEM-Neustart ein neues CSRF generiert wird, bleibt ein reload weiterhin noetig, ich habe es aber geaendert, so dass jetzt eine einfaches reload reicht.

Ralf W.

#24
Hallo Rudi,

danke, Tastenkombination hat geklappt. Dann warte ich auf das Update morgen. Beim Firefox hoffe ich, dass durch die  Einstellung browser. cache. check_doc_frequency = 1 alles wieder automatisch geht.

MfG
http://twitter.com/RWausD
Schon gewusst, dass Haarausfall zu einer Glatze führen kann?

FHEM: NUC7PJYH2, Ubuntu Server 22.04.2 LTS, HMCCU - RaspberryMatic, DE ConBee II, diverse Sensoren und Aktoren.

rudolfkoenig

Nach dem update morgen sollte gar kein refresh mehr notwendig sein, fhemdoc_modular.js versucht ab sofort beim Fehler einen neuen Token zu holen. Die Fehlermeldung im FHEM-Log wird aber weiterhin erscheinen, habe momentan keine Idee, wie ich das wegkriegen soll ausser komplett ausbauen, aber das ist z.Zt. noch nicht moeglich.

Hadl

Hallo zusammen,
ich habe ein ähnliches Problem, jedoch beim normalen Event Monitor.
Da wird scheinbar der Token richtig übergeben, aber das '+' im Exponenten geht verloren.
Im log schaut das dann so aus:
FHEMWEB WEB CSRF error: fhem_1.04140199466189e 15 ne fhem_1.04140199466189e+15. For detals see the csrfToken FHEMWEB attribute

rudolfkoenig

Die e+ Notation ist wohl selten genug, dass ich es nicht generiert bekomme, deswegen ist das Probem mir nicht aufgefallen.

Ich habe jetzt ein paar kleine Aenderungen durchgefuehrt, die solche Problemfaelle vermeiden sollten.
- aus dem "random" Token wird alles entfernt, was nicht a-z_0-9 ist, und es faengt jetzt mit csrf_ an (und nicht mehr mit fhem_)
- fhemweb.js fuegt jetzt den Token via encodeURIComponent hinzu (damit sollte das + richtig uebertragen werden)
- 01_FHEMWEB/fhemweb.js akzeptiert auch 0 als csrfToken. 0 war bisher teilweise synonym fuers abschalten, und hat wg. FW_csrfRefresh eine Endlosschleife bewirkt. 0 ist ein ganz normaler Token, und hat keine Sonderbedeutung.
- wenn aus anderen Gruenden eine FW_csrfRefresh-Endlosschleife auftreten sollte, wird es jetzt unterbunden.

Update wie immer morgen ab 8.

Skram

Hmm, das Abstellen mit "none" scheint bei mir nicht zu funktionieren.


define WEB FHEMWEB 8083 global
attr WEB confirmDelete 0
attr WEB csrfToken none
attr WEB endPlotNow 1


Und wenn ich im Browser die URL "http://fhem:8083/fhem?XHR=1" aufrufe, bekomme ich eine leere Antwort und finde im Log

2017.03.03 19:56:16 4: Connection accepted from WEB_192.168.0.23_52177
2017.03.03 19:56:16 4: WEB_192.168.0.23_52176 GET /fhem?cmd=jsonlist2&XHR=1; BUFLEN:0
2017.03.03 19:56:16 3: FHEMWEB WEB CSRF error:  ne csrf_429984230293756. For detals see the csrfToken FHEMWEB attribute
2017.03.03 19:56:16 4: name: /fhem?cmd=jsonlist2&XHR=1 / RL:20 / text/html; charset=UTF-8 / Content-Encoding: gzip


Was habe ich übersehen? Bin dankbar für Tipps.

(fhem.pl:13560/2017-03-01 perl:5.020002 os:linux user:fhem pid:25683)

rudolfkoenig

ZitatWas habe ich übersehen? Bin dankbar für Tipps.

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.

Ich gehe davon aus, dass die gezeigte Konfiguration nicht zum Log passt, entweder weil csrfToken nachtraeglich entfernt wurde, oder weil es fuer eine andere FHEM-Instanz gilt.
Kannst du bitte im Problemfall
list .* CSRFTOKEN
und
list .* csrfToken
ausfuehren, und die Ausgabe hier zeigen?