FHEM Forum

FHEM => Frontends => FHEMWEB => Thema gestartet von: RalfRog am 06 Dezember 2023, 01:23:22

Titel: [gelöst] csrf-Token: Anzahl der Zeichen, immer Ziffern 0-9 ?
Beitrag von: RalfRog am 06 Dezember 2023, 01:23:22
Hallo

Gibt es ein festes "Muster" nach dem das csrf-Token erzeugt wird (Anzahl und Art der Zeichen)?

Bisher hatte ich immer 20 Zeichen z.B. "csrf_209644018530033" - 5 fixe und 15 dezimale Ziffern (in den Beiträgen hier hab ich es auch so vorgefunden).
Kürzlich hatte ich nach einem Reboot 23 Zeichen => "csrf_591344292301355e15" - das "e" lässt auf Hexadez. schließen.
Heute nach dem Reboot wieder 20 Zeichen  ::)

Ich prüfe regelmäßig, ob in den Actions am Shelly zum setzen eines Readings (noch) das korrekte Token hinterlegt ist.


Gruß Ralf
Titel: Aw: csrf-Token: Anzahl der Zeichen, immer Ziffern 0-9 ?
Beitrag von: Otto123 am 06 Dezember 2023, 09:19:35
Hallo Ralf,

Zitat von: RalfRog am 06 Dezember 2023, 01:23:22- das "e" lässt auf Hexadez. schließen.
eher auf Exponentialschreibweise :)

Ich kann Deine Frage nicht beantworten, aber warum machst Du Dir dafür nicht eine Art API Web? https://wiki.fhem.de/wiki/CsrfToken-HowTo

Nachtrag: Ich denke, generell gibt es für den Token keine große Regel, außer das er sicher, unikat und eigentlich transparent für den Client sein soll. https://datatracker.ietf.org/doc/html/rfc6749#page-10
Insofern kann der Entwickler von FHEMWEB hier jederzeit anpassen und wird dazu wohl keine verbindliche Aussage treffen ;)

Gruß Otto
Titel: Aw: csrf-Token: Anzahl der Zeichen, immer Ziffern 0-9 ?
Beitrag von: MadMax-FHEM am 06 Dezember 2023, 09:41:35
Zitat von: RalfRog am 06 Dezember 2023, 01:23:22Ich prüfe regelmäßig, ob in den Actions am Shelly zum setzen eines Readings (noch) das korrekte Token hinterlegt ist.
Warum tust du das?
Passt du jedesn Mal nach einem Boot von fhem an?

Wenn ja: warum das?
Warum nicht ein extra FHEMWEB-Device für Shelly?
Dort dann ein festes Token setzen (ja nicht ganz so gut wie ab und an mal ein zufälliges neues Token / aber: bei mir läuft fhem durchaus mal lange/Monate durch und da ändert sich das Token auch nicht) und zusätzlich noch "erlaubte IPs" und evtl. sogar "erlaubte Befehle" setzen.

Gruß, Joachim
Titel: Aw: csrf-Token: Anzahl der Zeichen, immer Ziffern 0-9 ?
Beitrag von: rudolfkoenig am 06 Dezember 2023, 09:58:33
ZitatGibt es ein festes "Muster" nach dem das csrf-Token erzeugt wird (Anzahl und Art der Zeichen)?
Weiss nicht ob Folgendes als "festes Muster" gilt:
        my ($x,$y) = gettimeofday();
        ($defs{$name}{CSRFTOKEN}="csrf_".(rand($y)*rand($x))) =~s/[^a-z_0-9]//g;

ZitatInsofern kann der Entwickler von FHEMWEB hier jederzeit anpassen und wird dazu wohl keine verbindliche Aussage treffen ;)
Das sehe ich auch so :)
Titel: Aw: csrf-Token: Anzahl der Zeichen, immer Ziffern 0-9 ?
Beitrag von: RalfRog am 06 Dezember 2023, 10:38:42
Hallo
Danke euch für die Anworten.

@Otto: klar, das Wiki hatte ich im Sommer zur Rate gezogen um die Actions im Shelly zu setzen.

Zitat von: MadMax-FHEM am 06 Dezember 2023, 09:41:35
Zitat von: RalfRog am 06 Dezember 2023, 01:23:22Ich prüfe regelmäßig, ob in den Actions am Shelly zum setzen eines Readings (noch) das korrekte Token hinterlegt ist.
Warum tust du das?
Passt du jedesn Mal nach einem Boot von fhem an?

Wenn ja: warum das?
Warum nicht ein extra FHEMWEB-Device für Shelly?
Dort dann ein festes Token setzen (ja nicht ganz so gut wie ab und an mal ein zufälliges neues Token / aber: bei mir läuft fhem durchaus mal lange/Monate durch und da ändert sich das Token auch nicht) und zusätzlich noch "erlaubte IPs" und evtl. sogar "erlaubte Befehle" setzen.

Ja warum? Nicht drauf gekommen...
Danke für den Vorschlag. Ein eigenes Web-Device mit festem Token ist sicher das Vernüftigste und erspart das neue Setzen beim Neustart  ;) , erspart das nachprüfen und ist dauerhaft.

Gruß Ralf



P.S.
Ich hatte als Konstrukt zum Auslesen
Zitat$_antw  =~ /(csrf_\d+).*(csrf_\d+)/
um die beiden gesetzten Token in den Variablen $1 und $2 zu erhalten. Das griff dann mit "csrf_591344292301355e15" nicht mehr.

Titel: Aw: csrf-Token: Anzahl der Zeichen, immer Ziffern 0-9 ?
Beitrag von: Otto123 am 06 Dezember 2023, 10:45:13
Zitat von: RalfRog am 06 Dezember 2023, 10:38:42Ich hatte als Konstrukt zum Auslesen
aber der steht komplett hier ;) , für die FHEM Kommandozeile
{$FW_CSRF}oder liest Du das nicht in FHEM aus?
Titel: Aw: csrf-Token: Anzahl der Zeichen, immer Ziffern 0-9 ?
Beitrag von: RalfRog am 06 Dezember 2023, 13:34:34
Hallo Otto

Zitat von: Otto123 am 06 Dezember 2023, 10:45:13...
aber der steht komplett hier ;) , für die FHEM Kommandozeile
{$FW_CSRF}oder liest Du das nicht in FHEM aus?

Klar doch, zur Verabbeitung innerhalb FHEM nutze ich "$FW_CSRF"

Zum Vergleich mit den Shelly-Actions (Webhook) Button_ON & Button_OFF liefert der Shelly so etwas zurück
Check - Antwort Shelly:
{"actions":{"btn_on_url":[{"index":0,"urls":["http://<FHEM-IP>:8083/fhem?XHR=1&cmd=setreading%20shly%20Tor_Status%201&fwcsrf=csrf_134459292301355e15"],"enabled":true}],"btn_off_url":[{"index":0,"urls":["http://<FHEM-IP>:8083/fhem?XHR=1&cmd=setreading%20shly%20Tor_Status%200&fwcsrf=csrf_134459292301355e15"],"enabled":true}],"longpush_url":[{"index":0,"urls":[],"enabled":false}],"shortpush_url":[{"index":0,"urls":[],"enabled":false}],"out_on_url":[{"index":0,"urls":[],"enabled":false}],......

Für den Vergleich mit dem aktuellen Token (aus "$FW_CSRF") habe ich mir die beiden im Shelly abgelegten Token per
$_antw = (::GetFileFromURL("http://<Shelly-IP>/settings/actions",1))
$_antw =~ /(csrf_\d+).*(csrf_\d+)/
herausgeholt (bisher -> greift ja bei "e15" nicht).

Gruß Ralf
Titel: Aw: csrf-Token: Anzahl der Zeichen, immer Ziffern 0-9 ?
Beitrag von: frank am 06 Dezember 2023, 13:44:39
vielleicht so?
$_antw =~ /(csrf_[^"]+).*(csrf_[^"]+)/
Titel: Aw: csrf-Token: Anzahl der Zeichen, immer Ziffern 0-9 ?
Beitrag von: RalfRog am 06 Dezember 2023, 14:13:54
@Frank:  ist ein Versuch wert  :)

Die in Summe aufwandsärmste Variante ist wohl der Vorschlag #2 von MadMax.

Gut für mich jetzt aktuell nicht, da ich den  Code um den täglichen Check und das Neusetzen nach Restart reduzieren muss  ;)

Gruß Ralf