Qt Serial Port Sicherheitshinweise
Auf dieser Seite werden potenzielle Sicherheitsprobleme hervorgehoben, die bei der Verwendung des Moduls auftreten können, und es werden Vorschläge zu deren Vermeidung gegeben.
Überprüfen Sie, ob ein Portname
QSerialPort akzeptiert einen Portnamen als einfache Zeichenkette und führt keine Validierung durch, bevor versucht wird, ihn als serielles Gerät zu öffnen.
Ein vom Angreifer kontrollierter Name kann daher dazu führen, dass die Anwendung eine beliebige Datei, einen Geräteknoten oder sogar eine entfernte SMB-Freigabe öffnet. In den ersten beiden Fällen wird die Datei sofort geschlossen, sobald „ QSerialPort “ feststellt, dass es sich nicht um ein serielles Gerät handelt. Im SMB-Fall verhält es sich anders: Authentifizierungsdaten werden während des Öffnungsvorgangs an den Remote-Server gesendet, sodass diese auch dann offengelegt werden können, wenn der Öffnungsversuch letztendlich fehlschlägt.
Um dies zu verhindern, sollten Sie keine APIs verwenden, die den Namen des Ports als „ QString “ übernehmen, und stattdessen solche bevorzugen, die „ QSerialPortInfo “ verwenden:
- Bei der Entwicklung einer Benutzeroberfläche sollten Sie die verfügbaren Ports mit ` QSerialPortInfo::availablePorts()` auflisten und den Benutzern die Auswahl aus der Liste ermöglichen.
- Bei der Verarbeitung einer beliebigen Eingabezeichenfolge erstellen Sie daraus eine ` QSerialPortInfo `-Instanz und verwenden Sie ` QSerialPortInfo::isNull()` um zu prüfen, ob diese auf einen vorhandenen Port verweist.
Begrenzen Sie Eingabe- und Ausgabepuffer
Standardmäßig begrenzt ` QSerialPort ` die Größe der Ein- und Ausgabepuffer nicht. Unbegrenzte Puffer können den verfügbaren Speicher erschöpfen, was insbesondere auf Embedded-Geräten mit begrenztem Speicher ein Problem darstellt.
Wenn das Remote-Gerät Daten schneller sendet, als die Anwendung sie verarbeiten kann, kann der Lesepuffer unbegrenzt anwachsen. Verwenden Sie ` QSerialPort::setReadBufferSize()` (), um ihn zu begrenzen. Sobald das Limit erreicht ist, unterbricht ` QSerialPort ` das Lesen vom Gerät, bis die Anwendung die gepufferten Daten verarbeitet hat; eingehende Daten können daher verloren gehen, wenn der eigene Puffer des Treibers in der Zwischenzeit überläuft.
Ähnlich verhält es sich, wenn die Anwendung Daten schneller schreibt, als der Treiber sie senden kann: Der Schreibpuffer kann unbegrenzt anwachsen. Verwenden Sie ` QSerialPort::setWriteBufferSize()` (), um ihn zu begrenzen. In diesem Fall muss die Anwendung das Ergebnis des Aufrufs von ` QSerialPort::write()` () überprüfen, um festzustellen, wie viele Daten tatsächlich angenommen wurden, und den Rest später schreiben.
Beachten Sie Sperrdateien
Hinweis: Dieser Abschnitt gilt nur für Unix-ähnliche Systeme.
QSerialPort verwendet Sperrdateien, um festzustellen, ob der Port bereits von einem anderen Prozess verwendet wird, bevor versucht wird, ihn zu öffnen. Dies ist unter Unix gängige Praxis, sodass das Format und der Speicherort der Sperrdateien bekannt sind und die Verzeichnisse, in denen sie sich befinden, in der Regel für jeden Benutzer beschreibbar sind.
QSerialPort erkennt und entfernt veraltete Sperrdateien, doch ein lokaler Angreifer kann einen langlebigen Prozess starten und eine speziell gestaltete Sperrdatei erstellen, die auf diesen verweist. Eine solche Sperre wird niemals veraltet und verhindert auf unbestimmte Zeit, dass die Anwendung auf den seriellen Port zugreifen kann. Der Angreifer muss das serielle Gerät selbst dabei nicht berühren.
Der einzige Schutz vor diesem Angriff besteht darin, sicherzustellen, dass kein böswilliger Akteur Zugriff auf das System hat.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.