IE的FREAK对策(c)
接着之前的来,首先我们把AxMan的相关代码拖出来整理一下,由于我们现在有IDispatch了,所以我们先试验一下,通过精简版的AxMan遍历代码得到了所有的属性,大概有400个:
[374]Name 的值是 'createRange';
[374]Return 的值是 '????慒杮?';
[374]ArgCount 的值是 0;
[375]Name 的值是 'addEventListener';
[375]Return 的值是 '潶摩??慒杮?';
[375]ArgCount 的值是 3;
[376]Name 的值是 'removeEventListener';
[376]Return 的值是 '潶摩??慒杮?';
[376]ArgCount 的值是 3;
[377]Name 的值是 'dispatchEvent';
[377]Return 的值是 '??乁彔佂??';
[377]ArgCount 的值是 1;
[378]Name 的值是 'rootElement';
[378]Return 的值是 '卉?噓?敬敭瑮*';
[378]ArgCount 的值是 0;
可是最后似乎还是有点问题,信息中出现了很多乱码。而且也没有连接的信息,大部分还是一些无关痛痒甚至js就能拿到的东西。
最后,我查阅了资料发现IPersistPropertyPage是可以再Query出一个IHTMLDocument2的,这个就是证书那个属性页的具体内容。也是iframe.dll的一个资源,具体怎么实现的你们一查便知。
else if (elm.id == "_connInfo" )
{
var secInfo = window.dialogArguments.secureConnectionInfo;
if (secInfo == "")
elm.innerText = L_NotEncrypted_Text;
else
elm.innerText = secInfo ;
}
最后,我发现IHTMLOptionsHolder这个接口有个secureConnectionInfo,按照描述,就是它返回了连接的安全信息。
最后,我们根本没用这个,因为,IHTMLOptionsHolder根本获取不到! ←_←
最后,另一位大神给了另一种方式,两个都比较简单有效。大神的方法是挂Wininet的函数,我这边用的是Schannel的函数,最后效果大同小异,IE上防御不成问题。感谢大神在这个问题上给了无尽的思路。←_←