微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法从内存查看器保护/隐藏 Qt 中的 QNetworkAccessManager/QNetworkReply 敏感信息?

如何解决有没有办法从内存查看器保护/隐藏 Qt 中的 QNetworkAccessManager/QNetworkReply 敏感信息?

我正在尝试使用 Github API 来解析私有 GitHub 存储库中的一些数据,以将数据作为 JSON 连接和下载。

一切正常,但我有一个大问题。作为私有存储库,我不希望其他人访问私有存储库密钥或 JSON 内容解析等敏感数据。

这是我的代码

downloader.cpp

#include "downloader.h"

downloader::downloader()
{
    connect(&manager,&QNetworkAccessManager::finished,this,&downloader::downloadFinished);
}

void downloader::dodownload(const QUrl &url,int mode)
{
    download_Mode = mode;
    const QString username = "test";
    const QString token = "1234567890"
    const QByteArray basic_authorization = QByteArray("Basic ") + (username + ":" + token).toUtf8().toBase64();

    qnetworkrequest request(url);
    request.setRawHeader(QByteArrayLiteral("Authorization"),basic_authorization);
    request.setUrl(url);

    QNetworkReply *reply = manager.get(request);
    QEventLoop loop;
    connect(&manager,&loop,&QEventLoop::quit);

    #if QT_CONfig(ssl)
    connect(reply,&QNetworkReply::sslErrors,&downloader::sslErrors);
    #endif

    loop.exec();
}

bool downloader::isHttpRedirect(QNetworkReply *reply)
{
    int statusCode = reply->attribute(qnetworkrequest::HttpStatusCodeAttribute).toInt();
    return statusCode == 301 || statusCode == 302 || statusCode == 303
           || statusCode == 305 || statusCode == 307 || statusCode == 308;
}

void downloader::sslErrors(const QList<QSslError> &sslErrors)
{
#if QT_CONfig(ssl)
    for (const QSslError &error : sslErrors)
        fprintf(stderr,"SSL error: %s\n",qPrintable(error.errorString()));
#else
    Q_UNUSED(sslErrors);
#endif
}

void downloader::downloadFinished(QNetworkReply *reply)
{
    QUrl url = reply->url();
    if (reply->error()) {
        fprintf(stderr,"Download of %s Failed: %s\n",url.toEncoded().constData(),qPrintable(reply->errorString()));
    } else {
        if (isHttpRedirect(reply)) {
            fputs("Request was redirected.\n",stderr);
        } else {
            QJsonDocument doc = QJsonDocument::fromJson(reply->readAll());
            QByteArray e_Content = doc.object().value("content").toString().toUtf8();
            QByteArray d_Content = QByteArray::fromBase64(e_Content);
        }
    }
    reply->deleteLater();
}

问题是,当我运行我的程序时,如果我使用像 Process Hacker 这样的东西来检查我的进程,我可以看到纯文本中的每个敏感数据。这就像用户名/令牌/json 数据/下载链接/标题数据永远不会从内存中清除。

有没有办法在下载完成后从内存中清除敏感数据?或者,我至少可以以某种方式隐藏它?

PS:我试过加密用户名/令牌,但

request.setRawHeader(QByteArrayLiteral("Authorization"),basic_authorization);

正在显示我在内存中的数据并且从不清除。

提前致谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。