1

我正在尝试使用 NpapiBrowserHost.GetAuthenticationInfo 方法从 Firebreath 插件获取用户/密码。

我需要为基于 npapi 的浏览器(chrome/firefox/opera)执行此操作。所以这是我的代码:

boost::shared_ptr<FB::Npapi::NpapiBrowserHost> npapihost = 
    FB::ptr_cast<FB::Npapi::NpapiBrowserHost>(m_host);
if(npapihost)
{
        char * username = NULL; uint32_t ulen = 0; 
        char * password = NULL; uint32_t plen = 0;
        NPError err = npapihost->GetAuthenticationInfo("http", 
                                               "xxx.yyy.com", 
                                                80, 
                                                "Basic", 
                                                "Knownnameofrealm", 
                                                &username, &ulen, 
                                                &password, &plen );

}

在 Opera 中它可以工作。在 Chrome 和 Firefox 中,它返回 err = NPERR_GENERIC_ERROR,并且 ulen = 0,plen = 0(用户名,密码 - 错误的 ptr)。

此代码从 MypluginamePlugin::onPluginReady() 执行。

如果您成功获取凭据,请发布代码示例。

PS Chrome 根据铬源尚未实现 NPN_GetAuthenticationInfo https://code.google.com/p/chromium/issues/detail?id=23928

4

1 回答 1

2

在 Firefox 中,我应该使用-1 而不是 80 for http (443 for https)

简单来说,FF 的密码管理服务将其所有信息存储在一个 hashmap 中: Map entry = ( ((key to auth.object) , (objects with single user auth.info) )

每个键都是一个如下创建的字符串:(一些专业的东西)+(方案)+“://”+(主机)+“:”+(端口)。
FF 在创建新地图条目时将 INTERNET_DEFAULT_HTTP_PORT = 80 (INTERNET_DEFAULT_HTTPS_PORT = 443) 替换为 -1。

在 Opera 中,最初一切正常。

自 2009 年创建存根以来,Chrome 浏览器端端点功能未实现。

在 IE 中 npapihost 不可用。尽管我什至不必弄乱登录名/密码提取,因为默认的 CInternetSession(wininet 包)构造函数会自动完成。

于 2013-07-03T14:57:00.783 回答