Illegal offset type in Suche

  • Affected Version
    WoltLab Suite 5.4
    Affected App
    WoltLab Suite Core

    Die Suche kann zu einer Fehlermeldung führen, wenn man /index.php?search/&types%5B%5D[]=com.woltlab.wbb.post angibt:

    Requested URL
    GET /core/search/?types%5B%5D[]=com.woltlab.wbb.post
    Referrer
    Error Message
    Illegal offset type
    Type
    wcf\system\exception\ErrorException
    File (Line)
    /customers/kittmedia/home/shop.kittmedia.com/core/lib/system/WCF.class.php (344)
    Stacktrace
    1. /customers/kittmedia/home/shop.kittmedia.com/core/lib/system/api/sentry/sentry/sentry/src/ErrorHandler.php (303): wcf\system\WCF::handleError(…)
    2. /customers/kittmedia/home/shop.kittmedia.com/core/lib/system/search/SearchEngine.class.php (72): Sentry\ErrorHandler->handleError(…)
    3. /customers/kittmedia/home/shop.kittmedia.com/core/lib/form/SearchForm.class.php (175): wcf\system\search\SearchEngine->getObjectType(…)
    4. /customers/kittmedia/home/shop.kittmedia.com/core/lib/page/AbstractPage.class.php (121): wcf\form\SearchForm->readParameters(…)
    5. /customers/kittmedia/home/shop.kittmedia.com/core/lib/system/request/Request.class.php (89): wcf\page\AbstractPage->__run(…)
    6. /customers/kittmedia/home/shop.kittmedia.com/core/lib/system/request/RequestHandler.class.php (119): wcf\system\request\Request->execute(…)
    7. /customers/kittmedia/home/shop.kittmedia.com/core/index.php (11): wcf\system\request\RequestHandler->handle(…)
  • Ich versteh das Label nicht. Okay, es wird eine bessere Überprüfung eingebaut, die aber wiederum ebenfalls zu einer Fehlermeldung führt, die protokolliert wird. Das ist dann nichts Halbes und nichts Ganzes.

    • Official Post

    Es gibt „drölfzig“ Stellen, auf die dies zutrifft und die Ursache ist eine grundsätzliche Design-Schwäche bei der Verarbeitung von Parametern. Es ist fairerweise im Kern aber auch „nur“ ein „nerviges“ Problem. Es macht einfach keinen Sinn, an einer spezifischen Stelle anzusetzen, da dies das Problem effektiv nur verlagern würde.


    Eine echte Lösung kann nur eine wohldefinierte Verarbeitung von Parametern sein, die konsequent zum Einsatz kommt und eine einheitliche Verarbeitung ermöglicht. Dies erfordert eine ordentliche Planung und Durchführung, um dies sorgfältig umzusetzen.

    • Official Post

    Hallo,


    ich setze dieses Thema mal auf „Umgesetzt“, weil das von Alexander angesprochene Konzept existiert.

    Für Entwickler


    Mit WoltLab Suite 6.0 liefern wir „Valinor“ zur Strukturvalidierung von Eingabeparametern mit: https://docs.woltlab.com/6.0/m…braries/#input-validation


    Für API-Controller auf Basis von PSR-15 verweise ich ganz allgemein auf dieses Thema:



    Für Controller mit denen der Benutzer direkt interagiert, sollte der MappingError von Valinor gefangen werden, um die Benutzerfreundlichkeit zu erhöhen.


    Speziell für den id-Parameter sieht ein vollständiges Beispiel wie folgt aus. Es können und sollten natürlich auch andere Parameter (bspw. filter-Parameter) validiert werden. Referenziert dazu die Valinor-Dokumentation.

    Nicht-PSR-15, kein API-Controller

    PSR-15, API-Controller

    PHP
            $parameters = Helper::mapQueryParameters(
                $request->getQueryParams(),
                <<<'EOT'
                    array {
                        id: positive-int
                    }
                    EOT
            );
            // Objekt aus der Datenbank lesen und prüfen ob ID existiert.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!