Nutzung des csrfToken - Anleitung?

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

Vorheriges Thema - Nächstes Thema

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