Qt QML应用程序和安全性-是否存在任何问题?

Qt QML应用程序和安全性-是否存在任何问题?,qt,security,qml,qtquick2,Qt,Security,Qml,Qtquick2,我刚刚发现了一个惊人的发现——在部署QML应用程序时,项目中使用的所有“库存”QML组件都部署为裸QML文件,在文件系统中直接可见,它们甚至不像用户QML文件那样隐藏在应用程序qrc二进制文件中。这意味着任何人都可以打开这些人类可读的文件,并编写他需要执行的任何代码。此外,还可以对QObject派生类型进行大量的自省,即使是从QML中,您也可以爬下对象树,分析应用程序结构,迭代对象的方法和属性。有足够的空间进行恶意黑客攻击。你甚至不必去挖掘一些被忽略的低级漏洞——这些都只是为了获取 是否有任何安

我刚刚发现了一个惊人的发现——在部署QML应用程序时,项目中使用的所有“库存”QML组件都部署为裸QML文件,在文件系统中直接可见,它们甚至不像用户QML文件那样隐藏在应用程序qrc二进制文件中。这意味着任何人都可以打开这些人类可读的文件,并编写他需要执行的任何代码。此外,还可以对
QObject
派生类型进行大量的自省,即使是从QML中,您也可以爬下对象树,分析应用程序结构,迭代对象的方法和属性。有足够的空间进行恶意黑客攻击。你甚至不必去挖掘一些被忽略的低级漏洞——这些都只是为了获取


是否有任何安全功能可以防止这种情况发生?要检查已部署的QML源代码是否进行了修改,甚至是校验和?如果没有,是否有手动实现安全性的策略?部署过程似乎已经基本就绪,就是这样,没有定制的余地

还请注意,从我对的调查来看,似乎确实可以覆盖QML文件的解析方式,但即使这样做很困难,它如何与现有的部署方案叠加?是否有一种“漂亮”的方法来定制部署过程,特别是考虑到不同目标平台之间的差异很大

问题是不是关于保护我的代码免受剽窃,问题是关于保护Qt的代码免受篡改


由于许多人似乎在理解手头的问题上有问题,让我用一种隐喻的形式来表达,希望这样更容易理解。所有的锁都可以撬开,但这并不意味着如果你的门没有锁就没有问题。不能上锁的门的安全问题并不是没有根据的,因为锁不是绝对正确的

是的,所有的应用程序都可以被黑客攻击,但这在世界上是完全不同的,无论是需要对二进制文件进行反向工程,找到一个被忽略的低级漏洞并利用它达到恶意目的,还是只需要打开一个文本文件并编写您想要的内容

这不是典型的、固有的和不可避免的漏洞的情况,这取决于开发人员如何尽可能地将其最小化。这是一个巨大的、巨大的漏洞的情况,通过设计存在于Qt的QML应用程序部署策略中。解决这一问题不仅不是开发者的责任,而且Qt的许可计划很可能会阻碍开发者去做。当框架级别存在不安全性时,实现安全性有点困难,并且不允许您绕过它

出于某种原因,人们似乎忽视了这种内在安全性缺失的逆向工程方面。在黑客开始瞄准用户之前,他必须开发黑客。这就是最明显的不安全感。毫无疑问,黑客将拥有对自己机器的管理员/root访问权限,因此任何保护QML源代码不被写入的方案都不会起作用。使用QML引擎随意地解释文本文件使黑客攻击应用程序变得非常容易,比利用可执行二进制文件要容易得多。从那时起,还有其他途径可以破坏用户的系统(所有广泛使用的系统都容易受到攻击),但问题是,至少从单个应用程序开发人员的角度来看,一个被破坏的系统本身不会破坏我的应用程序中用户的数据,因为它存储在文件系统上受到保护,但它是在应用程序中公开的。让QML引擎如此不安全,并且很容易将任何代码注入到应用程序中——这是这里的大问题。泄露用户系统上的QML文件有多容易是次要的,也是次要的问题最大的问题是QML使黑客的初始开发变得多么容易。


最后,某些人的偏见是可以理解的,他们的工作围绕着Qt,他们的“专业职责”是淡化缺陷,这可能会妨碍Qt的采用,从而影响他们的业务,即使是专业的,当用户的安全和隐私受到威胁时,这也是非常不道德的。投资降低风险并不是提高产品声誉的最佳方式,这些风险不会因为你否认它们而消失,但是如果你改进了产品,它们就会消失。承认风险并致力于修复风险肯定会比成为头条新闻的潜在高姿态数据泄漏少一点尴尬。

使用Qt资源系统管理资源文件

Qt资源系统允许资源文件作为二进制文件存储在应用程序可执行文件中。这在构建混合QML/C++应用程序时非常有用,因为它允许通过资源系统URI方案引用QML文件(以及图像和声音文件等其他资源),而不是指向文件系统资源的相对或绝对路径。但是,请注意,如果使用资源系统,则每当更改QML源文件时,必须重新编译应用程序可执行文件,以便更新包中的资源

要在混合QML/C++应用程序中使用资源系统,请执行以下操作:

< P>创建一个.qRC资源收集文件,该文件从XML中列出XML格式的资源文件,将主要的QML文件作为一个资源加载,使用的是:/ /或前缀,或者作为一个URL,使用qRRC方案

完成此操作后,QML中由相对路径指定的所有文件将从资源系统中加载。资源系统的使用对Q完全透明
Blend.qml
BrightnessContrast.qml
Colorize.qml
ColorOverlay.qml
ConicalGradient.qml
Desaturate.qml
DirectionalBlur.qml
Displace.qml
DropShadow.qml
FastBlur.qml
GammaAdjust.qml
GaussianBlur.qml
Glow.qml
HueSaturation.qml
InnerShadow.qml
LevelAdjust.qml
LinearGradient.qml
MaskedBlur.qml
OpacityMask.qml
private
qmldir
RadialBlur.qml
RadialGradient.qml
RectangularGlow.qml
RecursiveBlur.qml
ThresholdMask.qml
ZoomBlur.qml
private
qmldir
qtgraphicaleffectsplugin.lib
qtgraphicaleffectsplugin.prl
qtgraphicaleffectsplugind.prl