[erledigt] "Problem" mit fhem?cmd=

Begonnen von wowogiengen, 19 Mai 2023, 10:54:51

Vorheriges Thema - Nächstes Thema

wowogiengen

Hallo,
ich verwende das o.g. Kommando, um mit dem TelegramBot eine Nachricht zu verschicken.
Der Auslöser des Kommandos ist eine Synology Diskstation (genauer gesagt, das Surveillance Station Modul), welches einen Web-Hook auslösen kann.

Wenn ich das gewünschte Kommando http://fhem2:8088/fhem?cmd=set%20teleBot%20_msg%20Kamera%20hat%20Bewegung%20erkannt!! so in der Adresszeile des Browsers eingebe, wird es genau 1 mal ausgeführt. Die angezeigte Adresse ist aber dann http://fhem2:8088/fhem?fw_id=.

Im Status der ursprünglich aufgerufenen Adresse wird 302 zurückgegeben, d.h. die Seite wurde verschoben oder die Adresse hat sich geändert (was ja eigentlich stimmt).

Für die Surveillance Station bedeutet der Statuscode 302 wohl jedoch einen Fehler, so dass der Web-Hook nochmals aufgerufen wird.

Im Ergebnis bekomme ich dann 2 mal eine Nachricht über den TelegramBot. Das gefällt mir nicht wirklich.

Kann man FHEM irgendwie dazu bringen, bei einem cmd-Aufruf über die Adresszeile keinen Status 302 zu senden, wenn der Befehl erfolgreich angenommen wurde?

Viele Grüße
Wolfgang


bartman121

Naja ob der Return-Code 302 (moved temporarily) wirklich sinnvoll ist, das weiß ich nicht.

Du könntest aber mal dieses Modul nutzen.
https://github.com/matgoebl/FhAPI

Das sollte mit Return Code 200 antworten.

LuckyDay

http://fhem2:8088/fhem?cmd=set%20teleBot%20_msg%20Kamera%20hat%20Bewegung%20erkannt&XHR=1
setze mal das &XHR=1 hinten an deinen link, dann wird dir keine fhemseite mehr zurück geschickt.

MadMax-FHEM

Es fehlt doch auch der csrfToken!?

Oder hast du den GANZ deaktiviert?

-> mindestens ein fixer token sollte sein!

(und wenn du sagst: och, ist doch alles nur lokal und so, dann hast du nicht verstanden wofür der gut ist! -> https://wiki.fhem.de/wiki/CsrfToken-HowTo )

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

wowogiengen

#4
Zitat von: fhem-hm-knecht am 19 Mai 2023, 15:37:44http://fhem2:8088/fhem?cmd=set%20teleBot%20_msg%20Kamera%20hat%20Bewegung%20erkannt&XHR=1
setze mal das &XHR=1 hinten an deinen link, dann wird dir keine fhemseite mehr zurück geschickt.

Damit hat es funktioniert...
Vielen Dank
Zitat von: MadMax-FHEM am 19 Mai 2023, 16:08:00Es fehlt doch auch der csrfToken!?

Oder hast du den GANZ deaktiviert?

-> mindestens ein fixer token sollte sein!

(und wenn du sagst: och, ist doch alles nur lokal und so, dann hast du nicht verstanden wofür der gut ist! -> https://wiki.fhem.de/wiki/CsrfToken-HowTo )

Gruß, Joachim

Fürs Testen war das erstmal gut so. Aber ich bin gerade dabei, den Token einzurichten.
das Webinterface sollte so definiert sein:

defmod WEBapi FHEMWEB 8088 global
attr WEBapi allowfrom 192.168.188.6|127.0.0.1|192.168.188.20
attr WEBapi csrfToken ************

Wie kann ich hier einstellen, dass nur das eine Kommando ausgeführt werden kann? Und dass man keine anderen Devices oder Räume sieht, falls man mal direkt auf die Seite http://fhem2:8088/fhem?fwcsrf=************ geht?

###############
### Achtung ###
###############

Wieso funktioniert der Link http://fhem2:8088/fhem trotzdem, ohne dass ich das fwcsrf angegeben habe?




Der Link sieht jetzt so aus:

http://fhem2:8088/fhem?fwcsrf=************&XHR=1&cmd=set%20teleBot%20_msg%20Kamera%20hat%20Bewegung%20erkannt

Kann es sein, dass die Reihenfolge der Parameter entscheidend ist?

Viele Grüße
Wolfgang

MadMax-FHEM

Hast du nach dem setzen des Token fhem neu gestartet?

(Ich glaube FHEMWEB muss das erst "verarbeiten", also, dass es nun "plötzlich" einen Token gibt  )

Es gibt bei FHEMWEB bzw. bei einem zugeordneten allowed-Device diverse Attribute, womit du ziemlich genau bestimmen kannst: wer, wo , wie was usw.

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

wowogiengen

Ich habe FHEM jetzt neu gestartet, aber trotzdem darf ich die ganze FHEM-Installation bearbeiten, ohne dass das Token verlangt wird

Hier nochmal das Web-Device:
Internals:
   BYTES_READ 24374
   BYTES_WRITTEN 118117
   CONNECTS   31
   CSRFTOKEN  ###
   DEF        8088 global
   FD         10
   FUUID      646104cd-f33f-a625-242c-a838343f89e853ca
   NAME       WEBapi
   NR         210
   NTFY_ORDER 50-WEBapi
   PORT       8088
   STATE      Initialized
   TYPE       FHEMWEB
   READINGS:
     2023-05-23 11:55:12   state           Initialized
Attributes:
   allowfrom  192.168.188.6|127.0.0.1|192.168.188.20
   csrfToken  ###

Was fehlt hier noch?

Viele Grüße
Wolfgang

MadMax-FHEM

Wie merkst du, dass es ohne Token geht?

Im Webbrowser?
-> der macht das automatisch ;)
(Wenn du F12 bzw. "developper Options/Ansicht" wählst, siehst du das im Aufruf [denke ich])

Schon mal per curl/wget etc. probiert?

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

wowogiengen

Hallo Joachim,
ja ich habe es sowohl im Webbrowser als auch mit curl probiert:

curl http://fhem2:8088/fhem

liefert mir dann
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head root="/fhem">
<title>Haus Wolfgang & Petra</title>
<link rel="shortcut icon" href="/fhem/icons/favicon" />
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="/fhem/pgm2/style.css?v=1684837394" rel="stylesheet"/>
<link href="/fhem/pgm2/jquery-ui.min.css" rel="stylesheet"/>
<script attr='' type="text/javascript" src="/fhem/pgm2/jquery.min.js"></script>
<script attr='' type="text/javascript" src="/fhem/pgm2/jquery-ui.min.js"></script>
<script attr='' type="text/javascript" src="/fhem/pgm2/fhemweb.js"></script>
<script attr='' type="text/javascript" src="/fhem/pgm2/f18.js"></script>
  <script type="text/javascript">
    $(document).ready(function() {
      $("select.set").change(attrAct);
      function
      attrAct(){
        if($("select.set").val() == "attrTemplate") {
          $('<div id="attrTemplateHelp" class="makeTable help"></div>')
                .insertBefore("div.makeTable.internals");
          $("select.select_widget[informid$=attrTemplate]").change(function(){
            var cmd = "{AttrTemplate_Help('"+$(this).val()+"')}";
            FW_cmd(FW_root+"?cmd="+cmd+"&XHR=1", function(ret) {
              $("div#attrTemplateHelp").html(ret);
            });
          });
        } else {
          $("div#attrTemplateHelp").remove();
        }
      }
      attrAct();
    });
  </script>

<script attr='' type="text/javascript" src="/fhem/pgm2/doif.js"></script>
<script attr='' type="text/javascript" src="/fhem/pgm2/fhemweb_readingsGroup.js"></script>
<script attr='' type="text/javascript" src="/fhem/pgm2/svg.js"></script>
<script attr='' type="text/javascript" src="/fhem/pgm2/dashboard.js"></script>
</head>
<body name='Haus Wolfgang & Petra' fw_id='400' generated="1684838262" longpoll="1" fwcsrf='wowo' data-jsLog='0' data-confirmDelete='1' data-confirmJSError='1' data-addHtmlTitle='1' data-styleData='' data-language='DE' data-availableJs='fbcalllist,readingsHistory,uzsu,iconRadio,iconLabel,iconButtons,knob,sortable,weekprofile,colorpicker,iconSwitch,readingsGroup' data-webName='WEBapi '>
<div id="menuScrollArea">
<div><a href="/fhem?"><div id="logo"></div></a></div>
<div id="menu">
<table>
<tr><td><table class="room roomBlock1">
<tr><td><div class="menu_Save_config"><a href="/fhem?cmd=save&fwcsrf=wowo"><span>Save config</span></a> <a id="saveCheck" class="changed" style="visibility:visible"><span>?</span></a></div></td>
</tr>
</table></td></tr>
<tr><td><table class="room roomBlock2">
<tr><td><div class="menu_anyViews"><a href="/fhem/dashboard/anyViews"><span>anyViews</span></a></div></td>
</tr>
</table></td></tr>
<tr><td><table class="room roomBlock3">
<tr><td><div class="menu_9_03_Tech"><a href="/fhem?room=9%2e03%5fTech"><span>9.03_Tech</span></a></div></td>
</tr>
<tr><td><div class="menu_9_99_Test"><a href="/fhem?room=9%2e99%5fTest"><span>9.99_Test</span></a></div></td>
</tr>
<tr><td><div class="menu_Bad"><a href="/fhem?room=Bad"><span>Bad</span></a></div></td>
</tr>
<tr><td><div class="menu_B__ro"><a href="/fhem?room=B%c3%bcro"><span>Büro</span></a></div></td>
</tr>
<tr><td><div class="menu_CUL_HM"><a href="/fhem?room=CUL%5fHM"><span>CUL_HM</span></a></div></td>
</tr>
<tr><td><div class="menu_DbLog"><a href="/fhem?room=DbLog"><span>DbLog</span></a></div></td>
</tr>
<tr><td><div class="menu_Flur"><a href="/fhem?room=Flur"><span>Flur</span></a></div></td>
</tr>
<tr><td><div class="menu_HWR"><a href="/fhem?room=HWR"><span>HWR</span></a></div></td>
</tr>
<tr><td><div class="menu_Heizung"><a href="/fhem?room=Heizung"><span>Heizung</span></a></div></td>
</tr>
<tr><td><div class="menu_K__che"><a href="/fhem?room=K%c3%bcche"><span>Küche</span></a></div></td>
</tr>
<tr><td><div class="menu_LogFiles"><a href="/fhem?room=LogFiles"><span>LogFiles</span></a></div></td>
</tr>
<tr><td><div class="menu_PhilipsTV"><a href="/fhem?room=PhilipsTV"><span>PhilipsTV</span></a></div></td>
</tr>
<tr><td><div class="menu_SVG"><a href="/fhem?room=SVG"><span>SVG</span></a></div></td>
</tr>
<tr><td><div class="menu_Schlafzimmer"><a href="/fhem?room=Schlafzimmer"><span>Schlafzimmer</span></a></div></td>
</tr>
<tr><td><div class="menu_Speis"><a href="/fhem?room=Speis"><span>Speis</span></a></div></td>
</tr>
<tr><td><div class="menu_System"><a href="/fhem?room=System"><span>System</span></a></div></td>
</tr>
<tr><td><div class="menu_Toilette"><a href="/fhem?room=Toilette"><span>Toilette</span></a></div></td>
</tr>
<tr><td><div class="menu_Unsorted"><a href="/fhem?room=Unsorted"><span>Unsorted</span></a></div></td>
</tr>
<tr><td><div class="menu_Wohnzimmer"><a href="/fhem?room=Wohnzimmer"><span>Wohnzimmer</span></a></div></td>
</tr>
<tr><td><div class="menu_telebot"><a href="/fhem?room=telebot"><span>telebot</span></a></div></td>
</tr>
<tr><td><div class="menu_Everything"><a href="/fhem?room=all"><img class='icon icoEverything' src="/fhem/images/default/icoEverything.png" alt="icoEverything" title="icoEverything">&nbsp;<span>Everything</span></a></div></td>
</tr>
</table></td></tr>
<tr><td><table class="room roomBlock4">
<tr><td><div class="menu_Logfile"><a href="/fhem/FileLog_logWrapper?dev=Logfile&type=text&file=fhem-2023-05.log"><span>Logfile</span></a></div></td>
</tr>
<tr><td><div><a href='/fhem/docs/commandref_DE.html' target="_blank"><span>Commandref</span></a></div></td>
</tr>
<tr><td><div><a href='http://fhem.de/fhem.html#Documentation' target="_blank"><span>Remote doc</span></a></div></td>
</tr>
<tr><td><div class="menu_Edit_files"><a href="/fhem?cmd=style%20list"><span>Edit files</span></a></div></td>
</tr>
<tr><td><div class="menu_Select_style"><a href="/fhem?cmd=style%20select"><span>Select style</span></a></div></td>
</tr>
<tr><td><div class="menu_Event_monitor"><a href="/fhem?cmd=style%20eventMonitor"><span>Event monitor</span></a></div></td>
</tr>
</table></td></tr>
</table>
</div>
</div>
<div id="hdr">
<table border="0" class="header"><tr><td style="padding:0">
<form method="post" action="/fhem">
<input type="hidden" name="fw_id" value="400"/>
<input type="hidden" name="fwcsrf" value="###"/>
<input type='text' name='cmd' class='maininput' size='40' value='' autocorrect='off' autocapitalize='off'/>
</form>
</td></tr></table>
</div>
</body></html>


für die Eingabe der Kommandozeile weiß die Webseite hier aber anscheinend schon das korrekte Token <input type="hidden" name="fwcsrf" value="###"/> ?

Also habe ich entweder noch irgenwo ein Attribut nicht gesetzt, oder irgendwo ist irgendetwas noch im cache - aber selbst mit dem Edge-Browser hat es funktioniert, und der kann das Token nicht kennen.
Oder was noch schlimmer wäre, die FHEM-Installation hat einen bug...

Wo suchen wir weiter?

Viele Grüße
Wolfgang

MadMax-FHEM

#9
JEDER Browser hat einen Mechanismus den Token zu "erfragen" und dann zu nutzen.

Und: du rufst ja nur die "Startseite" ab. Mit deinem geposteten "Link" setzt du ja KEINEN Befehl (cmd=...) ab!

Weil wenn du das csrf-Attribut nicht setzt (standard), dann erstellt fhem bei jedem Start ein neues (das ist der Unterschied zu einem fixen Token: Attribut gesetzt).
Ganz deaktviert wird es nur, wenn du das Attribut auf "none" setzt.
EDIT: und deaktivieren sollte man eben nicht. (ein fixer Token, wenn man keine Möglichkeit hat, wie im Wiki erläutert ein Token "zu erfragen" und dann zu nutzen / z.B. für WebHook aus IFTTT [wenn man sowas nutzen will] oder voan anderen Systemen, die nur "fixe Aufrufe" können...)
EDIT: damit sei noch mal ins Wiki verwiesen https://wiki.fhem.de/wiki/CsrfToken-HowTo

Was aber nicht geht/gehen sollte wäre ein Kommando per (curl) wget abzusetzen (also das was du eigentlich willst).
Also das hier:
Zitathttp://fhem2:8088/fhem?cmd=set%20teleBot%20_msg%20Kamera%20hat%20Bewegung%20erkannt&XHR=1
sollte ohne csrf-Token-Attribut oder mit fixem Token NICHT gehen, wenn du wget (oder curl) verwendest...

Es sollte dann im fhem Log vermerkt sein, dass eben kein Token oder ein nicht passender Token verwendet wurde...

Eben probiert:
wget http://192.168.1.121:8083/fhem?cmd=set%20Licht%20on
liefert:
Zitat--2023-05-23 13:58:05--  http://192.168.1.121:8083/fhem?cmd=set%20Licht%20on
Connecting to 192.168.1.121:8083... connected.
HTTP request sent, awaiting response... 400 Bad Request
2023-05-23 13:58:05 ERROR 400: Bad Request.

liefert im fhem Log:
Zitat2023.05.23 13:58:05 3: FHEMWEB WEB CSRF error:  ne csrf_16849861xxxxxxx for client WEB_192.168.1.140_50908 / command set Licht on. For details see the csrfToken FHEMWEB attribute.

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

wowogiengen

Hallo MadMax-FHEM.

auch wenn ich "nur" die Startseite des FHEM abrufe, erwarte ich, dass das nicht geht. Weil wie man sieht, hat man ja dann trotz Tokenmechanismus die Chance, dass man FHEM normal bedienen kann. Außer ich muss über Attribute des Web-Devices (welche?) dann noch alle nicht erwünschten Dinge abschalten:
  • Eingabezeile oben
  • Liste aller Räume
  • "Save config"
  • "anyViews"
  • "Logfile"
  • "Commandref"
  • "Remote doc"
  • "Edit files"
  • "Select style"
  • "Event monitor"

Und wie du aus meiner Auflistung des Web-Devices sehen könntest, ist das CSRF-Attribut gesetzt. bei meinen "normalen" Web-Devices steht es auf "random", und hier für den WebHook der synology-diskstation habe ich einen fixen Wert eingetragen.

Der Verweis auf das Wiki ist also unnötig, da ich meiner Meinung nach bereits alles getan habe, um das Token richtig einzusetzen.

Das direkte Ausführen des Kommandos ohne Token oder mit falschem Token geht tatsächlich nicht.

Aber wenn sich jemand auf die Startseite Zugriff verschafft hat, kann er von dort aus das Token auslesen, und somit trotzdem weitermachen...

Bitte weitere sachdienliche Hinweise, damit ich das korrekt machen kann.

Vielen Dank
Wolfgang


MadMax-FHEM

Noch mal: Zugriff per Browser -> da erledigt der Browser das mit dem Token "für dich" (und zwar schon immer seit Einführung! Weil implizit ein Token gesetzt wird, außer du deaktivierst den Mechanismus -> none)

Und: es klickt ja ein Mensch, also du in der geladenen Webseite rum und ein Mensch (du) führt per Klick im Browser die Befehle aus...

Was eben verhindert wird, dass das auch einfach per Link geht, wo eben der Token fehlt

Hast du mal das Wiki gelesen?

Habe es eben (sogar) mit einem Browser probiert:
http://192.168.1.121:8083/fhem?cmd=set%20Licht%20on
liefert bei mir "nichts".

Folgendes liefert "please define Licht first" (ja habe kein Device namens Licht ;)  ):
http://192.168.1.121:8083/fhem?cmd=set%20Licht%20on&fwcsrf=csrf_richtigerToken

Wenn das bei dir anders ist, dann ist irgendwas bei dir "komisch".
Du kannst auch das Attribut löschen, dann "denkt" sich fhem bei jedem Start ein neues Token aus.
Wie geschrieben, ist das halt "doof" für Scripts/Endsysteme etc. die halt mit variablen Token nicht umgehen können...

Evtl. den Thread nach:
Zitat von: help FHEMWEBModule: 01_FHEMWEB.pm Maintainer: rudolfkoenig Forum: Frontends/FHEMWEB
verschieben.

Da liest Rudolf mit, vielleicht hat er eine Idee...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

wowogiengen

Hallo Joachim,
du schriebst:

Zitat von: MadMax-FHEM am 23 Mai 2023, 14:56:42Noch mal: Zugriff per Browser -> da erledigt der Browser das mit dem Token "für dich" (und zwar schon immer seit Einführung! Weil implizit ein Token gesetzt wird, außer du deaktivierst den Mechanismus -> none)

Und: es klickt ja ein Mensch, also du in der geladenen Webseite rum und ein Mensch (du) führt per Klick im Browser die Befehle aus...

Was eben verhindert wird, dass das auch einfach per Link geht, wo eben der Token fehlt

Hast du mal das Wiki gelesen?

Soweit verstanden, ja.

 
Zitat von: MadMax-FHEM am 23 Mai 2023, 14:56:42Habe es eben (sogar) mit einem Browser probiert:

http://192.168.1.121:8083/fhem?cmd=set%20Licht%20on
liefert bei mir "nichts".
Setze ich hier bei mir die richtige IP-Adresse ein, dann will er Benutzername und Passwort und dann kommt nichts


Zitat von: MadMax-FHEM am 23 Mai 2023, 14:56:42Folgendes liefert "please define Licht first" (ja habe kein Device namens Licht ;)  ):
http://192.168.1.121:8083/fhem?cmd=set%20Licht%20on&fwcsrf=csrf_richtigerToken
Ja, das ist bei mir dann auch so...
 
Zitat von: MadMax-FHEM am 23 Mai 2023, 14:56:42Wenn das bei dir anders ist, dann ist irgendwas bei dir "komisch".
Du kannst auch das Attribut löschen, dann "denkt" sich fhem bei jedem Start ein neues Token aus.
Wie geschrieben, ist das halt "doof" für Scripts/Endsysteme etc. die halt mit variablen Token nicht umgehen können...

Evtl. den Thread nach:
Zitat von: help FHEMWEBModule: 01_FHEMWEB.pm Maintainer: rudolfkoenig Forum: Frontends/FHEMWEB
verschieben.

Da liest Rudolf mit, vielleicht hat er eine Idee...

Gruß, Joachim

Soweit habe ich den Mechanismus schon verstanden. Und es scheint ja auch unter den hier zitierten Rahmenbedingungen zu funktionieren.

Aber, und das denke ich, ist das wichtigste... Solange der Aufruf von http://192.168.1.121:8083/fhem immer noch irgendwas an response bringt, woraus man den Token extrahieren könnte, ist das Sicherheitskonzept hinüber...:

C:\Users\Wolfgang>curl http://fhem2:8088/fhem
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head root="/fhem">
<title>Haus Wolfgang & Petra</title>
<link rel="shortcut icon" href="/fhem/icons/favicon" />
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="/fhem/pgm2/style.css?v=1684837394" rel="stylesheet"/>
<link href="/fhem/pgm2/jquery-ui.min.css" rel="stylesheet"/>
<script attr='' type="text/javascript" src="/fhem/pgm2/jquery.min.js"></script>
<script attr='' type="text/javascript" src="/fhem/pgm2/jquery-ui.min.js"></script>
<script attr='' type="text/javascript" src="/fhem/pgm2/fhemweb.js"></script>
<script attr='' type="text/javascript" src="/fhem/pgm2/f18.js"></script>
  <script type="text/javascript">
    $(document).ready(function() {
      $("select.set").change(attrAct);
      function
      attrAct(){
        if($("select.set").val() == "attrTemplate") {
          $('<div id="attrTemplateHelp" class="makeTable help"></div>')
                .insertBefore("div.makeTable.internals");
          $("select.select_widget[informid$=attrTemplate]").change(function(){
            var cmd = "{AttrTemplate_Help('"+$(this).val()+"')}";
            FW_cmd(FW_root+"?cmd="+cmd+"&XHR=1", function(ret) {
              $("div#attrTemplateHelp").html(ret);
            });
          });
        } else {
          $("div#attrTemplateHelp").remove();
        }
      }
      attrAct();
    });
  </script>

<script attr='' type="text/javascript" src="/fhem/pgm2/doif.js"></script>
<script attr='' type="text/javascript" src="/fhem/pgm2/fhemweb_readingsGroup.js"></script>
<script attr='' type="text/javascript" src="/fhem/pgm2/svg.js"></script>
<script attr='' type="text/javascript" src="/fhem/pgm2/dashboard.js"></script>
</head>
<body name='Haus Wolfgang & Petra' fw_id='3031' generated="1684856530" longpoll="1" fwcsrf='wowo' data-jsLog='0' data-confirmDelete='1' data-confirmJSError='1' data-addHtmlTitle='1' data-styleData='' data-language='DE' data-availableJs='fbcalllist,readingsHistory,uzsu,iconRadio,iconLabel,iconButtons,knob,sortable,weekprofile,colorpicker,iconSwitch,readingsGroup' data-webName='WEBapi '>
<div id="menuScrollArea">
<div><a href="/fhem?"><div id="logo"></div></a></div>
<div id="menu">
<table>
<tr><td><table class="room roomBlock1">
</table></td></tr>
</table>
</div>
</div>
<div id="hdr">
<table border="0" class="header"><tr><td style="padding:0">
<form method="post" action="/fhem">
<input type="hidden" name="fw_id" value="3031"/>
<input type="hidden" name="fwcsrf" value="wowo"/>
</form>
</td></tr></table>
</div>
</body></html>

C:\Users\Wolfgang>



Viele Grüße
Wolfgang

PS. Wie verschiebt man den Thread? Das kann doch nur ein Admin?



MadMax-FHEM

#13
Zitat von: wowogiengen am 23 Mai 2023, 17:41:55Aber, und das denke ich, ist das wichtigste... Solange der Aufruf von http://192.168.1.121:8083/fhem immer noch irgendwas an response bringt, woraus man den Token extrahieren könnte, ist das Sicherheitskonzept hinüber...:

Nein.

Weil damit ja nur (in deinem Fall) eine Seite kommt aber ja noch nichts bedient wurde.

Wirklich mal Wiki gelesen?
Mechanismus bzw. was verhindert werden soll wirklich verstanden?

Worum es geht: wenn du einfach einen Link mit einem Kommando/Befehl anklickst, dann soll dieser nicht ausgeführt werden. Wird er auch nicht, da ja der "Angreifer" das korrekte Token raten müsste. Ohne csrf Token braucht der "Angreifer" keinen Token raten, weil eben der Link einfach so ausgeführt wird.

EDIT: cross site request forgery nicht cross site webpage openinig ;)
Siehe auch Wiki
ZitatDieses Feature erhöht die Sicherheit (siehe Links ganz unten), führt aber dazu, dass man nicht mehr (wie in älteren Anleitungen beschrieben), mit einem statischen http Link Steuerbefehle (auch Webhooks) an das FHEMWEB senden kann.

Wichtig: STATISCHE Links (z.B. du bekommst eine Mail mit einem Link und klickst drauf / in dem Link steht dann z.B. "sudo rm -R /" [also ein Shell-Kommando und wenn dann z.B. der User fhem sudo ohne PW für alles dürfte -> ;)  ] aber nat. gehen auch andere Kommandos).

Verschieben: da muss "unten" (oder "oben") irgendwo ein Knopf sein...

Wobei es doch bei dir funktioniert!!?
Weil:
Zitat von: wowogiengen am 23 Mai 2023, 17:41:55
ZitatHabe es eben (sogar) mit einem Browser probiert:

Code Auswählen Erweitern
http://192.168.1.121:8083/fhem?cmd=set%20Licht%20onliefert bei mir "nichts".
Setze ich hier bei mir die richtige IP-Adresse ein, dann will er Benutzername und Passwort und dann kommt nichts

Zitat von: wowogiengen am 23 Mai 2023, 17:41:55
ZitatFolgendes liefert "please define Licht first" (ja habe kein Device namens Licht ;)  ):
Code Auswählen Erweitern
http://192.168.1.121:8083/fhem?cmd=set%20Licht%20on&fwcsrf=csrf_richtigerToken
Ja, das ist bei mir dann auch so...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

Und wie geschrieben:

entweder das Attribut löschen, dann muss das andere System, welches eben einen WebHook aufruft eine Möglichkeit haben den Token herauszubekommen und dann im tatsächlichen Aufruf, mit dem Befehl, dann den ermittelten Token mitgeben.

Wenn das andere System das nicht kann, also nur mit einem fest vorgegebenen Link (statischer Link ;) ) arbeiten kann, dann eben das Attribut auf einen festen Wert/Token setzen, damit das andere System eben genau doch einen statischen Link "aufrufen" kann. Aber: da bist ja du selbst "der Angreifer" ;) und willst ja, dass der Befehl ausgeführt wird...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)