使用SiteLock模板,保护你的ActiveX控件

当我们为网站开发ActiveX控件的时候,也许会出于保密或者保护控件功能由指定网站独享的目的,希望限制使用此控件的域。

SiteLock是微软提出的针对ActiveX安全的一个解决方案。可以帮助ActiveX控件只运行在指定域里面。SiteLock功能在IE浏览器未被木马攻击的情况是可以信任的。


这个功能实现原理比较简单,在控件任何方法入口加上域的检查:

1. 在控件内获取IE浏览器接口IWebBrowser2

2. 通过此接口的get_LocationURL方法获取控件所在网页的URL。

3. 检查这个URL的域是否在白名单中。如果不是信任的域,任何方法都不允许调用。


使用方法:

1. 工程中include sitelock.h(下载地址:http://www.microsoft.com/downloads/thankyou.aspx?familyId=43cd7e1e-5719-45c0-88d9-ec9ea7fefbcb&displayLang=en)

2. 为控件类继承SiteLock模板 IObjectSafetySiteLockImpl。

public IObjectSafetySiteLockImpl<CActiveXDemo, INTERFACESAFE_FOR_UNTRUSTED_CALLER |INTERFACESAFE_FOR_UNTRUSTED_DATA>

3. 定义域名白名单,支持通配符*。

    BEGIN_SITELOCK_MAP()
        SITELOCK_ALLOWHTTP(L"*.alibaba.com")
        SITELOCK_ALLOWHTTPS(L"*.alibaba.com")
        SITELOCK_ALLOWHTTP(L"*.1688.com")
        SITELOCK_ALLOWHTTPS(L"*.1688.com")
    END_SITELOCK_MAP()

4. 在程序中需要控件的方法前加入域的检查

//限制控件被信任者调用相关的宏
#define ENABLE_CALLER_VALIDATE_CHECK

#ifdef ENABLE_CALLER_VALIDATE_CHECK
    #define DO_CALLER_VALIDATE_CHECK() if (!InApprovedDomain()){return E_FAIL;}
#else
    #define DO_CALLER_VALIDATE_CHECK()
#endif


开发ActiveX控件最好都加上SiteLock机制,尽量减少产生漏洞的可能。或者保护我们控件提供的服务只有我们允许的网站可以使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值