处理不受信任的数据
有关使用 Qt 处理不信任数据的建议。
不受信任的数据
不受信任的数据是指来自应用程序无法保证其完整性的数据源的数据。用户提供的数据、网络数据、生成的数据或应用程序未直接创建的数据都属于不可信任数据。对不可信数据的不当处理会导致应用程序崩溃、私人数据泄露,并对用户和硬件造成伤害。因此,开发人员必须对其代码如何接收和处理不受信任的数据保持警惕。
确保数据安全的责任最终在于应用程序。不过,应用程序可以依赖 Qt 的某些开发部分来安全地处理和验证数据。例如,Qt 模块可以验证图像、安全地操作字符串,并能处理传入的网络数据包。Qt 将这些类型的功能视为安全关键。在开发过程中,安全关键 API 要经过额外的审查和测试。
Qt 项目有一套广泛的 Qt 功能设计和测试流程。有关 Qt 安全策略的更多信息,请参阅《Qt 中的安全性》。
使用 Qt 减少风险和漏洞
使用 Qt 可以降低处理不信任数据的许多风险。以下章节将介绍 Qt 应用程序中处理不信任数据的各个方面。
用户输入验证
缺乏适当的输入验证会导致错误数据和意外行为。不过,严格的验证规则也会妨碍用户输入数据。例如,阻止输入某些字符会导致用户输入错误信息或弱密码。
Qt 为用户输入提供了多个验证器。请参见
- QValidator 和行编辑示例- C++ 验证器和示例
- Qt Quick 验证器- QML 验证器
命令注入
常见的安全漏洞是外部进程恶意执行命令。从不受信任的数据中执行命令会导致用户数据暴露、访问私人资源和其他恶意活动。应用程序还可能将不受信任的数据与受信任的数据相结合,从而玷污数据。
常见的缓解方法是验证文本并将其与可能的可执行命令分开。明确的允许命令列表、服务器端和客户端验证以及对数据的仔细分析也有助于降低风险。此外,还建议使用执行系统命令而不是执行文本脚本的可信插件和库。
解码图片
来自不可信来源的图片可能会导致系统崩溃或性能下降。确保应用程序在加载或处理图像前对图像路径、图像类型和文件扩展名进行消毒。此外,应用程序在处理大型图像和意外格式时,不应降低性能或导致系统崩溃。
反序列化数据
如果用于反序列化的数据来自信任边界之外,则应将其视为不受信任的数据,数据必须经过额外的审查。序列化数据可能已损坏或包含恶意内容。反序列化这些数据可能导致错误数据、应用程序崩溃或恶意代码执行。检查内容的完整性,例如使用加密或散列技术。此外,在反序列化数据时,要从容处理错误,防止系统崩溃。
更多信息,请参阅
Qt Qml 和 JavaScript 源代码
Qt Qml 假定应用程序开发人员提供了所有代码和资源。QML 是一种具有基本保护功能的通用内存安全语言。不过,QML 没有独立隐私域的概念。这意味着任何代码,无论是远程加载还是本地加载,都能访问其范围内的所有数据。
QML 应用程序应从本地文件系统或通过 Qt 的资源系统加载资源。如果需要使用网络,则应通过 HTTPS 或在可信网络中获取资源。
© 2025 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.