本页内容

处理不可信数据

关于使用 Qt 处理不可信数据的建议。

不可信数据

不可信数据是指来自应用程序无法保证其完整性的数据源的数据。不可信数据的示例包括用户提供的数据、网络数据、生成的数据,或应用程序未直接创建的数据。对不可信数据处理不当可能会导致应用程序崩溃、私有数据泄露,并给用户和硬件造成损害。 因此,开发人员必须警惕代码接收和处理不受信任数据的方式。

确保数据安全的责任最终在于应用程序本身。不过,应用程序可以依赖 Qt 开发的某些组件来安全地处理和验证数据。例如,Qt 模块可以验证图像、安全地操作字符串,并处理传入的网络数据包。 Qt 将此类功能视为安全关键型功能。在开发过程中,安全关键型 API 会接受额外的审查和测试。

Qt 项目拥有一套完善的功能设计和测试流程。有关 Qt 安全政策的更多信息,请参阅《Qt 中的安全》。

使用 Qt 降低风险和漏洞

使用 Qt 可降低处理不可信数据时的许多风险。以下各节将介绍 Qt 应用程序中处理不可信数据的各个方面。

用户输入验证

如果缺乏适当的输入验证,可能会导致数据错误和意外行为。然而,过于严格的验证规则也可能阻碍用户输入数据。例如,禁止某些字符可能会导致用户输入错误信息或弱密码。

Qt 为用户输入提供了多种验证器。参见:

命令注入

一种常见的安全漏洞是外部进程执行恶意命令。执行来自不可信数据的命令可能会导致用户数据泄露、私有资源被访问以及其他恶意活动。应用程序还可能将不可信数据与可信数据混合,从而污染数据。

一种常见的缓解措施是验证文本内容,并将其与可能的可执行命令分离。通过结合服务器端和客户端验证,采用明确的命令白名单,并仔细解析数据,也有助于降低风险。此外,建议使用可信的插件和库来执行系统命令,而不是直接执行文本脚本。

图像解码

来自不可信来源的图像可能会导致系统崩溃或性能下降。请确保应用程序在加载或处理图像之前,对图像路径、图像类型和文件扩展名进行清理。此外,应用程序在处理大尺寸图像和意外格式时,应确保不会导致性能下降或系统崩溃。

数据反序列化

如果待反序列化的数据来自信任边界之外,则应将其视为不可信数据,并对其进行额外审查。序列化数据可能已损坏或包含恶意内容。反序列化此类数据可能会导致数据错误、应用程序崩溃或恶意代码执行。 请检查内容的完整性,例如使用加密或哈希技术。此外,在反序列化数据时,应优雅地处理错误,并防止系统崩溃。

有关更多信息,请参阅

Qt Qml 以及 JavaScript 源代码

Qt Qml 假设应用程序开发人员提供了所有代码和资源。QML 是一种具有基本保护机制的、通常内存安全的语言。但是,QML 没有独立隐私域的概念。这意味着任何代码,无论是在远程还是本地加载的,都可以访问其作用域内的所有数据。

Qt Qml 应用程序应从本地文件系统或通过 Qt的资源系统加载资源。如果需要使用网络,请通过 HTTPS 或在受信任的网络内获取资源。

© 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.