我用 C# 编写了一个 ActiveX 控件,并使用 regasm 命令使其工作,只要安全级别设置为低,它就可以正常工作。然后作为下一步,我制作了一个 .cab 安装程序(ICD - Internet 组件下载器),并用测试证书签署了我的 .cab 文件和 ActiveX .dll 文件。当我从我的浏览器中点击 html 页面时,安装部分在 IE 的默认安全设置下工作正常,但最后似乎没有安装任何东西,并且在 ActiveX 的位置显示了一个红叉。此外,我还探索了 Windows 目录下的 Download Program Files 文件夹,在状态栏中显示“未知”一词。而它是为所有其他 activeX“安装”的。可能是什么问题。
此外,如果我使用 regasm 命令注册程序集,它工作正常,并且我已经签署了 ActiveX,但我仍然必须在我的浏览器设置中将安全栏调低?为什么会这样?那么签约的目的是什么?我在我的 .inf 文件中使用了 RegisterServer=yes
如果有人已经解决了这个问题,请告诉我?
最佳答案
为了在 IE 中运行,您还需要实现 IObjectSafety,以便 IE 知道由不受信任的调用者和/或使用不受信任的数据调用是安全的。 (如果真的安全的话,那就是)
就个人而言,我只在 C++ 和 ATL 中完成过此操作,而不是 C#,但这里有一篇博客文章,看起来应该可以帮助您在 C# 中实现此操作。
原因是不法分子的脚本可能会使用您的对象来绕过 IE 提供的正常安全性,因此您的 ActiveX 对象必须自行防御不受信任的页面。
当您签署出租车时,您是在告诉用户他们正在下载的出租车是他们认为正在下载的出租车 - 即,一些恶意的人没有用危险的出租车替换您的出租车。如果他们信任您作为发布者,那么他们就可以相信 ActiveXObject 本身不会做任何坏事,也不会与他们信任的其他代码结合使用。
当您实现 IObjectSafety 时,返回 INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA,您是在告诉 IE 该对象不能被其他任何人恶意使用,因此可以安全地与用户未明确信任的代码一起运行。
关于c# - ActiveX 在默认安全设置下无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1644828/