如何解决有没有办法从内存查看器保护/隐藏 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 举报,一经查实,本站将立刻删除。