ActiveX 安全问题

工作中写了一个MFC ActiveX,测试的时候,发现IE6和IE8修改了安全设置后能够正常运行,IE7和别的浏览器则始终无法正常运行,经过多方查找,发现缺少一些安全信息注册,添加下列代码后能够正常运行了。

 首先定义三个函数:

HRESULT CreateComponentCategory(CATID catid, WCHAR *catDescription)  
{  
    ICatRegister *pcr = NULL ;  
    HRESULT hr = S_OK ;  
    hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,   
        NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);  
    if (FAILED(hr))  
        return hr;  
    // Make sure the HKCR/Component Categories/{..catid}  
    // key is registered.  
    CATEGORYINFO catinfo;  
    catinfo.catid = catid;  
    catinfo.lcid = 0x0409 ; // english  
    size_t len;  
    // Make sure the provided description is not too long.  
    // Only copy the first 127 characters if it is.  
    // The second parameter of StringCchLength is the maximum  
    // number of characters that may be read into catDescription.  
    // There must be room for a NULL-terminator. The third parameter  
    // contains the number of characters excluding the NULL-terminator.  
    hr = StringCchLength(catDescription, STRSAFE_MAX_CCH, &len);  
    if (SUCCEEDED(hr))  
    {  
        if (len>127)  
        {  
            len = 127;  
        }  
    }     
    else  
    {  
        // TODO: Write an error handler;  
    }  
    // The second parameter of StringCchCopy is 128 because you need   
    // room for a NULL-terminator.  
    hr = StringCchCopy(catinfo.szDescription, len + 1, catDescription);  
    // Make sure the description is null terminated.  
    catinfo.szDescription[len + 1] = '/0';  
    hr = pcr->RegisterCategories(1, &catinfo);  
    pcr->Release();  
    return hr;  
}  

 

HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
{
    // Register your component categories information.
    ICatRegister *pcr = NULL ;
    HRESULT hr = S_OK ;
    hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, 
        NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
    if (SUCCEEDED(hr))
    {
        // Register this category as being "implemented" by the class.
        CATID rgcatid[1] ;
        rgcatid[0] = catid;
        hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid);
    }
    if (pcr != NULL)
        pcr->Release();
    return hr;
}

 

HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
{
    ICatRegister *pcr = NULL ;
    HRESULT hr = S_OK ;
    hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, 
        NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
    if (SUCCEEDED(hr))
    {
        // Unregister this category as being "implemented" by the class.
        CATID rgcatid[1] ;
        rgcatid[0] = catid;
        hr = pcr->UnRegisterClassImplCategories(clsid, 1, rgcatid);
    }
    if (pcr != NULL)
        pcr->Release();
    return hr;
}

 

然后在STDAPI DllRegisterServer(void)和STDAPI DllUnregisterServer(void)中添加下列代码:

STDAPI DllRegisterServer(void)中:

    HRESULT hr;
    hr = CreateComponentCategory(CATID_SafeForInitializing, 
        L"Controls safely initializable from persistent data!");
    if (FAILED(hr))
        return hr;
    hr = RegisterCLSIDInCategory(CLSID_SafeItem, 
        CATID_SafeForInitializing);
    if (FAILED(hr))
        return hr;
    // Mark the control as safe for scripting.
    hr = CreateComponentCategory(CATID_SafeForScripting, 
        L"Controls safely  scriptable!");
    if (FAILED(hr))
        return hr;
    hr = RegisterCLSIDInCategory(CLSID_SafeItem, 
        CATID_SafeForScripting);
    if (FAILED(hr))
        return hr;

 

STDAPI DllUnregisterServer(void)中:

    HRESULT hr;
    hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, 
        CATID_SafeForInitializing);
    if (FAILED(hr))
        return hr;
    hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, 
        CATID_SafeForScripting);
    if (FAILED(hr))
        return hr;

 

其中CLSID_SafeItem就是就是浏览器中使用的clsid。

时间: 2024-10-30 11:33:11

ActiveX 安全问题的相关文章

VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程

开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件.(此文章也是总结了网上好多人写的文章,我只是汇总一下,加上部分自己的东西,在这里感谢所有在网上发表相关内容的朋友们.) ActiveX控件用于Web的过程是将控件嵌入主页中,用户通过浏览器访问该主页时,将主页中的控件下载,并在用户机器上注册,以后就可在用户的浏览器上运行.控件下载一次后就驻留在用户本地机器上,下次再访问相同的主页时,可不再下载该控件,而是直接运行用户本地的控件.这里控件容器就是

webbrowser 打开本地html时报错 1%不是有效的win32应用程序

问题描述 会先提示activex安全问题,然后就提示脚本错误了.这个html通过ObjectForScripting调用了winform的方法. 解决方案 解决方案二:webBrowser1.ScriptErrorsSuppressed=true忽略脚本错误..解决方案三:引用1楼crystal_lz的回复: webBrowser1.ScriptErrorsSuppressed=true忽略脚本错误.. 忽略后能正常调用winform的方法吗?提示这个错误后点击就没反应了.解决方案四:引用2楼s

ASP文件中的安全问题

安全|问题 ASP中可能有哪些安全问题? ASP具有简单.易用.多功能,可扩充性等强大功能,但也存在一些问题.譬如,如果使用ASP的话,可能会导致网络的安全性大大降低了!下面为大家举一个例子,请按照下面的步骤: (1)从http://home.gbsource.net/xuankong/dll.zip下载这个文件,解压缩后把其中的test.dll文件拷贝到c:windowssystem(如果你使用的是NT的话,请拷贝到相应的目录中): (2)接下来打开"开始/运行"菜单输入"

ASP组件中的安全问题 (转)

安全|问题 Microsoft推出的ASP(Active Server Page)以简单.易用.功能多.可扩充性等强大功能得到了网友和大多数网管的喜爱,大有完全代替CGI的趋势.但是我要对你说,如果使用ASP的话,你网络的安全同时也大大降低了! 在我继续说下去之前,请你完成以下步骤: 1.下载这个文件"http://home.gbsource.net/xuankong/dll.zip",解压缩后把其中的test.dll文件拷贝到"c:\windows\system"

ASP主件中的安全问题

安全|问题 Microsoft推出的asp以简单,易用,多功能,可扩充性等强大功能得到了网友和大多数网管的青睐,大有完全替代cgi的趋势,但是在这里也存在一些问题,如果在使用asp的话,你网络的安全同时也大大降低了!下面为大家举一个例子,请按照下面的步骤: 1,下载这个文件http://home.gbsource.net/xuankong/dll.zip,解压缩后吧其中的test.dll文件拷贝到c:\windows\system(如果你使用的是NT的话,请拷贝到相应的目录中): 2,接下来打开

浅析浏览器安全问题

事端 – 安全漏洞穿透用户桌面 2009年2月,微软发布了广受关注的MS09-002安全漏洞公告,并随之马上提供了针对该漏洞的更新补丁.当访问者使用IE 7浏览器访问特定规格的网页时,MS09-002漏洞会允许远程恶意代码执行,从而破坏访问者的计算机系统.这一问题的典型性在于,面向浏览器的恶意攻击已经成为过去一年当中增长最为迅猛的一类桌面安全威胁.同时,在该威胁发布后的,各大防病毒产品厂商都截获了大量基于该漏洞的攻击.甚至一些以前流行过的恶意软件,都开始集成针对MS09-002的攻击机制生成新变

Activex控件被阻止怎么办

  我们经常使用上网,在使用浏览器浏览某些网页的时候,就会提示Activex控件被阻止,然后怎么怎么样?那么Activex控件到底是个什么东西?Activex控件被阻止会对电脑上网有影响吗?下面百事网就为你叭一叭Activex控件的那些事. Activex控件是什么 ActiveX控件,简单的说,它就是IE浏览器的插件,例如IE的Flash播放器就是一个ActiveX控件.ActiveX存在明显的安全问题,因为它其实也是一种程序,如果你安装了某个ActiveX控件,那这个控件就有权限在你电脑上做

浏览器安全问题分析

事端 – 安全漏洞穿透用户桌面 2009年2月,微软发布了广受关注的MS09-002安全漏洞公告,并随之马上提供了针对该漏洞的更新补丁.当访问者使用IE 7浏览器访问特定规格的网页时,MS09-002漏洞会允许远程恶意代码执行,从而破坏访问者的计算机系统.这一问题的典型性在于,面向浏览器的恶意攻击已经成为过去一年当中增长最为迅猛的一类桌面安全威胁.同时,在该威胁发布后的,各大防病毒产品厂商都截获了大量基于该漏洞的攻击.甚至一些以前流行过的恶意软件,都开始集成针对MS09-002的攻击机制生成新变

activex-Web调用ATL ActiveX控件,IE8无法打开网页,IE7可以运行,但提示内存访问冲突!

问题描述 Web调用ATL ActiveX控件,IE8无法打开网页,IE7可以运行,但提示内存访问冲突! 我的参考文章http://blog.csdn.net/u010258235/article/details/16823543,自己按照这个步骤试了一下,但是打开html网页时提示如下: Internet Explorer 已经为了帮助保护您的计算机而关闭此网页 运行不正常的加载项或恶意加载项导致 Internet Explorer 关闭此网页. 您可以执行以下操作: 转到主页 尝试返回查看的