【问题标题】:ActiveX not working properly with default security settingsActiveX 在默认安全设置下无法正常工作
【发布时间】:2009-10-29 16:09:53
【问题描述】:

我已经用 C# 编写了一个 ActiveX 控件,并使用 regasm 命令使其工作,只要安全级别设置为低,它就可以正常工作。然后下一步我制作了一个 .cab 安装程序(ICD - Internet 组件下载器),并使用测试证书签署了我的 .cab 文件和 ActiveX .dll 文件。当我从浏览器点击 html 页面时,安装部分在 IE 的默认安全设置下工作正常,但最后似乎没有安装任何东西,并且在 ActiveX 的位置显示了一个红十字。此外,我还探索了 Windows 目录下的 Download Program Files 文件夹,在状态栏中显示“未知”一词。而它是为所有其他activeX“安装”的。可能是什么问题。 此外,如果我使用 regasm 命令注册程序集,它可以正常工作,并且我已经签署了 ActiveX,但我仍然必须在浏览器设置中将安全栏移到低位?为什么会这样?那么签约的目的是什么?我在我的 .inf 文件中使用了RegisterServer=yes

如果有人遇到过这个问题,请告诉我?

【问题讨论】:

  • 如果您使用命令提示符转到已下载的程序文件,您是否看到了您的预期?如果您一直在测试,您的子目录中可能有多个版本的控件。尝试删除所有这些并进行干净的下载/安装。
  • 是的,有组件下载..组件的名称是我的activeX控件的CLSID,状态未知,当我使用regasm命令手动注册程序集时,还有一件事,它改变了我的控件的名称在将程序文件从 CLSID 下载到我用于 ActiveX 的强名称密钥中,但它仍然不起作用?我在清理文件夹后尝试过..

标签: c# .net installation activex cab


【解决方案1】:

为了在 IE 中运行,您还需要实现 IObjectSafety 以便 IE 知道被不受信任的调用者和/或不受信任的数据调用是安全的。 (如果它实际上是安全的,那就是)

就我个人而言,我只在 C++ 和 ATL 中完成了这项工作,而不是在 C# 中,但这里有一篇博客文章看起来应该可以帮助您在 C# 中实现这一目标。

http://blog.devstone.com/aaron/2007/06/12/ImplementingIObjectSafetyInNETMarkingClassesSafeForScripting.aspx

这样做的原因是不法分子的脚本可能会使用您的对象绕过 IE 提供的正常安全性,因此您的 ActiveX 对象必须自己防御不受信任的页面。

当您签署出租车时,您是在告诉用户他们正在下载的出租车是他们认为正在下载的出租车 - 即,某些恶意人员并未将您的出租车替换为危险的出租车。如果他们信任您作为发布者,那么他们就可以相信 ActiveXObject 不会自行或与他们信任的其他代码一起做任何坏事。

当你实现 IObjectSafety 时,返回 INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA,您是在告诉 IE,该对象不能被其他任何人恶意使用,因此可以安全地与用户不明确信任的代码一起运行。

【讨论】:

  • 那么签署我的 ActiveX 的目的是什么?我已经用 x509 证书对其进行了签名,当我右键单击我的 activeX dll 文件然后单击属性时,它会显示数字签名
  • 您可以签署您的 ActiveX,这表明它是您的,但您不能信任安装后调用 ActiveX 的网页或脚本。在 Intranet 上,您可能有一个“危险”对象,该对象读取和写入磁盘,或将潜在的机密信息发送到服务器。这应该被签名,但应该只在受信任区域中的页面调用对象时才有效,就像您目前所做的那样。在广阔的互联网上,您可以将 ActiveX 对象用于仅执行用户告诉它的小部件。这是安全的,必须使用 IObjectSafety 进行标记。
  • 所以你的意思是除了数字签名,我还需要实现接口?我对吗?并且我可以在我的网页中使用它而无需更改安全设置?所以我需要这两件事 1) 实现 IObjectSafety 2) 数字签名 如果我错了,请纠正我?
  • paul 感谢您的帮助.. 它解决了问题.. 但我仍然面临一个问题,我的 INF 文件无法正常工作.. 我必须使用 regasm 命令手动注册 ActiveX 控件。 ..如何查看我的安装日志?
  • 您可以在 Windows 注册表中打开安装程序日志记录(请参阅 support.microsoft.com/kb/223300)。此外,如果此答案解决了您的问题,您可能应该将其设为可接受的答案。
【解决方案2】:

对我来说,上面的解决方案不起作用。 我还需要注册 tlb

with : regasm MyDll.DLL /tlb

【讨论】:

    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多