CsrfToken-HowTo: Unterschied zwischen den Versionen

Aus FHEMWiki
(Ergänzung um festen Token)
(Formatierung geändert)
Zeile 7: Zeile 7:


Was früher so ging:
Was früher so ging:
  http://localhost:8083/fhem?cmd=set%20Office%20on
 
<code><nowiki>http://localhost:8083/fhem?cmd=set%20Office%20on</nowiki></code>
 
muss jetzt etwas ergänzt werden. Mit dem Einzeiler
muss jetzt etwas ergänzt werden. Mit dem Einzeiler
  curl -s -D - 'http://localhost:8083/fhem&XHR=1' | awk '/X-FHEM-csrfToken/{print $2}'
 
<code><nowiki>curl -s -D - 'http://localhost:8083/fhem&XHR=1' | awk '/X-FHEM-csrfToken/{print $2}'</nowiki></code>
 
kann man den aktuellle csrfToken aus dem Header extrahieren und muss ihn nur noch an den Aufruf anhängen:
kann man den aktuellle csrfToken aus dem Header extrahieren und muss ihn nur noch an den Aufruf anhängen:
  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
 
<code><nowiki>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</nowiki></code>
 
Man kann auch in Scripten den token zunächst abspeichern:
Man kann auch in Scripten den token zunächst abspeichern:
  token=$(curl -s -D - 'http://localhost:8083/fhem&XHR=1' | awk '/X-FHEM-csrfToken/{print $2}')
 
  curl --data "fwcsrf=$token" http://localhost:8083/fhem?cmd=set%20Office%20on
<code><nowiki>token=$(curl -s -D - 'http://localhost:8083/fhem&XHR=1' | awk '/X-FHEM-csrfToken/{print $2}')
curl --data "fwcsrf=$token" http://localhost:8083/fhem?cmd=set%20Office%20on</nowiki></code>


==API Web==
==API Web==
Zeile 23: Zeile 30:
   attr WEBapi allowFrom 192.168.178.83|127.0.0.1
   attr WEBapi allowFrom 192.168.178.83|127.0.0.1


Hier ist ganz gut beschrieben wie man die Gestaltung des regEx für die IP Adresse machen kann -> https://forum.fhem.de/index.php?topic=23994.0
Hier ist ganz gut beschrieben wie man die Gestaltung des regEx für die IP Adresse machen kann -> Linkliste


==csrfToken festlegen==
==csrfToken festlegen==
Zeile 32: Zeile 39:
Damit können feste URLs verwendet werden:
Damit können feste URLs verwendet werden:


  http://localhost:8083/fhem?cmd=set%20Office%20on&fwcsrf=<fester token>
<code><nowiki>http://localhost:8083/fhem?cmd=set%20Office%20on&fwcsrf=<fester token></nowiki></code>


==csrfToken abschalten==
==csrfToken abschalten==
Zeile 43: Zeile 50:


   attr global featurelevel 5.7
   attr global featurelevel 5.7
==Links==
https://forum.fhem.de/index.php?topic=23994.0

Version vom 4. März 2017, 22:18 Uhr

FHEM hat mit der Version 5.8 eine Sicherheitsmaßnahme scharfgeschaltet, den csrfToken. Dieser Token wird bei jedem Neustart von FHEM neu gebildet.

Diese Feature erhöht die Sicherheit, führt aber dazu, dass man nicht mehr mit einem einfachen http Link auf das FHEMWEB zugreifen kann.

Einzeiler

Was früher so ging:

http://localhost:8083/fhem?cmd=set%20Office%20on

muss jetzt etwas ergänzt werden. Mit dem Einzeiler

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

kann man den aktuellle csrfToken aus dem Header extrahieren und muss ihn nur noch an den Aufruf anhängen:

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

Man kann auch in Scripten den token zunächst abspeichern:

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

API Web

Falls man ohne den Token arbeiten will könnte man ein eigenes API Web erstellen und den Zugriff darauf beschränken. In vorhandenen Scripten / Applikationen müsste dann lediglich der Port geändert werden.

 define WEBapi FHEMWEB 8088 global
 attr WEBapi csrfToken none
 attr WEBapi allowFrom 192.168.178.83|127.0.0.1

Hier ist ganz gut beschrieben wie man die Gestaltung des regEx für die IP Adresse machen kann -> Linkliste

csrfToken festlegen

Dies kann man tun, falls die dynamische Abfrage zur Laufzeit des Tokens nicht möglich ist.

 attr WEB.* csrfToken <beliebige Folge aus Zeichen und Zahlen>

Damit können feste URLs verwendet werden:

http://localhost:8083/fhem?cmd=set%20Office%20on&fwcsrf=<fester token>

csrfToken abschalten

Dies sollte man als erste Hilfe tun, aber unbedingt darüber nachdenken wie man die Applikation umstellt.

 attr WEB.* csrfToken none

Featurelevel

Eine weitere temporäre Notfallmaßnahme wäre den Featurelevel nach dem Update einfach wieder zurückzudrehen

 attr global featurelevel 5.7

Links

https://forum.fhem.de/index.php?topic=23994.0