如何使用QtWebkit并阻止混合内容?

时间:2013-12-16 14:58:01

标签: redirect https blocking qtwebkit

我正在尝试实现混合内容拦截器 (即,使用QtWebKit阻止所有http://填充在https://页面内)。

这是我到目前为止使用子类化QNetworkAccessManager的原始实现 并重新实现createRequest()

QNetworkReply *  MyNetworkAccessManager::createRequest ( Operation op, const QNetworkRequest & req, QIODevice * outgoingData)
{
    QNetworkRequest r = req;    /* Take a non-const copy */

    if(this->mainWindow->ui->blockMixedContent_checkBox->isChecked()) { // <-- is Mixed content blocking enabled ?

        QUrl    url(this->URL); // <--- this->URL is the top level URL that is shown on URL bar

        if(url.scheme() == "https") {   // <--- Okay, top level URL scheme is https://
                if(r.url().scheme() == "http") {    // <-- This particular request URL scheme was http:// block it
                    qDebug() << "HALF-ENCRYPTED URL: " << r.url();
                    r.setUrl(QUrl());   // Set url to empty to "block" it 
                }
        }
    }

    return QNetworkAccessManager::createRequest( op, r, outgoingData );
}

现在,当我访问测试混合内容阻止的页面时 https://ie.microsoft.com/testdrive/browser/mixedcontent/assets/woodgrove.htm 一切都很好,它会阻止活动(脚本)和被动(图像)混合http:// content。

但是,当我尝试点击来自https://startpage.com的http://链接时,或者当https://页面将我重定向到http://页面时,或者当我从https://返回历史记录时页面到http://页面它会阻止我!

那么当用户点击https://页面上的http://链接时,如何从https://重定向到http:// site或从历史记录返回历史记录,我怎么能告诉他们不要使用混合内容阻止https://到http:// page ???

例如,有没有办法从https:// - &gt;中捕捉重定向? http://在调用creatRequest()之前?

或者这些所有检查都可以在createRequest()中以某种方式完成???

0 个答案:

没有答案