SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value: '\xC0\xA7\xC0\xA2%2...'

  • Gestern war mal wieder in Bot unterwegs der folgenden Fehler im Log verursacht hat:



    Ausgelöst wird der Fehler in einem EL von mir:


    Code
            <eventlistener name="moderationQueueReport">
                <eventclassname>wcf\data\moderation\queue\ModerationQueueReportAction</eventclassname>
                <eventname>finalizeAction</eventname>
                <listenerclassname>foo\system\event\listener\ModerationQueueReportListener</listenerclassname>
            </eventlistener>


    Die Spalte additionalData hat die utf8mb4_unicode_ci Kollation, was ja eigl. standardmäßig das Problem bei dieser Art von Fehler ist.

    Hat hier jmd. noch eine Idee, wie ich diesen Fehler abfangen kann?


  • Das sollte so schon passen, weswegen mich der Fehler auch etwas verwirrt. Es war definitiv ein böser Bot / Angriff (wie auch immer man es nennen will), da auch andere SQL-Injections getestet wurden.


    Ich hab auch mal absichtlich Emojis (z.B. 😀) eingefügt, kann den Fehler aber manuell nicht reproduzieren.

    • Official Post

    Hallo,


    der Fehler entsteht, wenn der Wert keine gültige UTF-8-Sequenz ist. Strings sind in PHP Bytestrings und entsprechend nicht notwendigerweise gültiges UTF-8.

    Das sollte so schon passen,

    Jein. Für Spalten mit serialisierten Daten sollte eigentlich eher eine BLOB-Spalte genutzt werden (und wird es auch in neuerem Code, beispielsweise WebAuthn oder die neuen Sessions), aber das verschiebt das Problem potentiell nur, weil anderer Code dann nicht darauf vorbereitet ist, kein gültiges UTF-8 zu haben.

    • Official Post

    Hallo,

    Hast du mir hier einen Beispiel "Text" mit dem ich das lokal mal nachtesten kann?

    im Endeffekt wirst du vermutlich einfach irgendwas beliebiges aus random_bytes ziehen können. Ansonsten siehe hier: https://de.wikipedia.org/wiki/…_Bytes_und_ihre_Bedeutung

    Und wie kann ich das Problem letztendlich abfangen?

    Im simpelsten Fall einfach ein try-catch, das den Fehler ignoriert. Ich weiß ja nicht, was du mit deinem Event-Listener genau vor hast.

Participate now!

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