Avatar

von 2.3.5 zur aktuellen.... (Bugs)

by Auge ⌂, Sunday, April 09, 2023, 16:44 (381 days ago) @ Andreas Schneider

Hallo

Der Verweis zum Thread:
https://mylittleforum.net/forum/index.php?id=11863

Der Verweis, wo es in der posting.inc.php stehen soll:
https://github.com/My-Little-Forum/mylittleforum/pull/469/files

Der Query-String den mein Browser anzeigt:
https://xxx.de/index.php?mode=posting&delete_posting=169462&csrf_token=6432aa163870b5.99373782&back=entry

Bei Candleman war das Problem, dass er offensichtlich vergessen hatte, beim Update einige Subtemplates hochzuladen, was dazu führte, dass der ab der Version 2.4.20 an der Stelle vorausgesetzte Token nicht im Template stand und somit auch nicht an den Server übertragen wurde, als er gebraucht wurde. Das ist bei dir aber der Fall. Das Token steht in der URL als deren Parameter csrf_token drin. Das ist es also nicht.

In der von mir mit 2.4.24 eingespielten posting.inc.php befindet sich in Zeile 1373 folgendes:

if ($authorization['delete'] === true && isset($_REQUEST['csrf_token']) && $_REQUEST['csrf_token'] == $_SESSION['csrf_token']) {


und das entspricht syntaktisch nicht dem was hier
https://github.com/My-Little-Forum/mylittleforum/pull/469/files
erwähnt wird.
Dort:
if ($authorization['delete'] == true && isset($_REQUEST['csrf_token']) && $_REQUEST['csrf_token'] === $_SESSION['csrf_token']) {

sind die Prüfungen "==" und "===" anders geschrieben.

Die Prüfungen sind unterschiedlich streng. Mit zwei Gleichheitszeichen wird in PHP "nur" geprüft, ob die Werte gleich sind, mit drei Gleichheitszeichen zudem, ob sie vom selben Datentyp sind.

Kleiner Exkurs:

Da PHP automatische Typumwandlungen bereitstellt, ist nicht nur "2" == "2" (zwei Zeichenketten, die jeweils aus der Ziffer 2 bestehen) wahr, sondern auch "2" == 2 (eine Zeichenkette, die aus der Ziffer 2 besteht und ein Integerwert 2). Wenn man typsicher vergleicht (mit drei Gleichheitszeichen), ist "2" === "2" wahr, aber "2" === 2 unwahr, da es sich um unterschiedliche Datentypen handelt.

Was den von dir gezeigten Code betrifft, gilt, dass man für die Prüfung der übermittelten Zeichenkette des Tokens gegen eine auf dem Server gespeicherte Version der selben Zeichenkette keine Typsicherheit braucht, für die Prüfung der als boolescher Wert gespeicherten grundsätzlichen Erlaubnis, ein Posting zu löschen ($authorization['delete'] === true), aber schon, da die automatische Typumwandlung in PHP bei der Prüfung mit nur zwei Gleichheitszeichen auch 1 zu true machen würde. Wir wollen aber explizit auf den aus der Funktion get_edit_authorization, in der der Wert für $authorization['delete'] ermittelt wird, gelieferten Wert (true oder false) prüfen.

Meine bescheidenen Versuche das einzugrenzen enden dahingehend, dass in Zeile 1374 der posting.inc.php der $_REQUEST['csrf_token'] scheinbar nicht gesetzt ist.

Woran machst du das fest?

Tschö, Auge

--
Trenne niemals Müll, denn er hat nur eine Silbe!


Complete thread:

 RSS Feed of thread