模块化应用程序模式:如何检查哪个是调用模块
Modular application pattern: How to check which is the calling Module
我目前正在使用 prism 5.0 在 c# .NET 4.5 中编写模块化桌面应用程序。
我的应用程序由"core"(或主机)和几个模块组成。
我的每个模块都实现了 prism 提供的 IModule
接口。
我的应用程序的核心为模块提供了一个 "API",因此它们可以轻松地与 application/other 模块交互。例如,"API" 允许模块发布或订阅事件或与 BDD 通信。
这是我的问题:
BDD中有一些敏感信息,我事先不知道哪个模块会运行。我想处理 "malicious" 模块的可能性:我想为我的主机应用程序添加一层安全性。例如,我想检查一个模块是否有权删除 BDD 中的某些内容。
我怎么能那样做?我已经拥有存储在 BDD 中的每个模块的权限,但是我怎么知道哪个模块正在以安全的方式调用 API?
一切都应该动态完成,因为我事先不知道哪个模块 运行。
目前我想到的是:
对 API 的调用应该带一个额外的参数:Type
。但是模块可以通过 typeof(someType)
轻松伪造类型
对 API 的调用应该带一个额外的参数:一个 IModule
:调用模块会将自己 (this
) 作为参数发送,所以我可以检查 API 中的类型。但是调用模块仍然可以通过提供的 UnityContainer 或其他任何方式获取另一个模块的一些实例来轻松伪造它。
通过StackFrame
检查调用对象的类型。这个可能是 "safer",但在我看来它确实又重又脏。
还有别的办法吗?我是 c# 和模块化模式的新手,我确定我遗漏了一些东西。
编辑: 我将使用 sboutzen 的方法在加载程序集时验证我的模块。如果模块是已知模块,我会给他一个随机生成的密钥。每次模块想要调用 API 时,他都必须提供提供的密钥,以便我可以检查他的身份。
这是我能想到的最安全的事情了。
您可以使用强命名模块。
参见 https://msdn.microsoft.com/en-us/library/xc31ft41%28v=vs.110%29.aspx。这样您就可以对每个模块(程序集)进行身份验证和授权。
我目前正在使用 prism 5.0 在 c# .NET 4.5 中编写模块化桌面应用程序。
我的应用程序由"core"(或主机)和几个模块组成。
我的每个模块都实现了 prism 提供的 IModule
接口。
我的应用程序的核心为模块提供了一个 "API",因此它们可以轻松地与 application/other 模块交互。例如,"API" 允许模块发布或订阅事件或与 BDD 通信。
这是我的问题:
BDD中有一些敏感信息,我事先不知道哪个模块会运行。我想处理 "malicious" 模块的可能性:我想为我的主机应用程序添加一层安全性。例如,我想检查一个模块是否有权删除 BDD 中的某些内容。 我怎么能那样做?我已经拥有存储在 BDD 中的每个模块的权限,但是我怎么知道哪个模块正在以安全的方式调用 API?
一切都应该动态完成,因为我事先不知道哪个模块 运行。
目前我想到的是:
对 API 的调用应该带一个额外的参数:
Type
。但是模块可以通过typeof(someType)
轻松伪造类型
对 API 的调用应该带一个额外的参数:一个
IModule
:调用模块会将自己 (this
) 作为参数发送,所以我可以检查 API 中的类型。但是调用模块仍然可以通过提供的 UnityContainer 或其他任何方式获取另一个模块的一些实例来轻松伪造它。通过
StackFrame
检查调用对象的类型。这个可能是 "safer",但在我看来它确实又重又脏。
还有别的办法吗?我是 c# 和模块化模式的新手,我确定我遗漏了一些东西。
编辑: 我将使用 sboutzen 的方法在加载程序集时验证我的模块。如果模块是已知模块,我会给他一个随机生成的密钥。每次模块想要调用 API 时,他都必须提供提供的密钥,以便我可以检查他的身份。
这是我能想到的最安全的事情了。
您可以使用强命名模块。 参见 https://msdn.microsoft.com/en-us/library/xc31ft41%28v=vs.110%29.aspx。这样您就可以对每个模块(程序集)进行身份验证和授权。