配置与静态属性,安全性问题

Max*_*oro 2 .net c# security configuration

我正在开发一个类库,我需要提供一种设置配置参数的方法.我可以创建一个配置部分,或者我可以公开静态属性.我对静态属性的关注是安全性.是什么阻止恶意组件在运行时进行更改?例如,在ASP.NET MVC中,您使用静态属性配置路由.这样安全吗?恶意组件可以添加/删除路由吗?


"不受信任的组件"如何首先进入我的应用程序?以NuGet为例.我们不知道那里有什么,谁做了,以及它是否包含一些不希望的状态变化.

"不受信任的组件"将如何运行?在ASP.NET中,您只需要PreApplicationStartMethodAttribute在应用程序启动时运行一些代码.

Ran*_*Ran 10

当您将某些事情视为安全威胁时,您还应该考虑您要保护的对象.

为了让"恶意代码"改变您的static属性值,需要将此代码加载到您的AppDomain运行中.现在认为恶意攻击者设法让他的代码在你的代码中运行AppDomain- 你的static属性真的是你的主要关注点吗?这样的攻击者可能做得最糟糕.

除非您有需要加载源自外部不受信任来源的程序集/代码的情况,否则我认为您并不需要防止您的用户访问您的属性(不是从安全角度来看 - 可用性是另一回事).

编辑 - 关于外部不受信任的代码

我仍然认为这不是你真正关心的问题.如果我理解正确,您正在开发并提供一个库,供其应用程序中的某些第三方使用.

如果应用程序所有者决定使用一些他不信任的外部库,将其添加到他的应用程序中,并允许它运行,那么这不是您的关注,这是应用程序所有者的关注.

在这种情况下,我上面说的一切仍然适用.恶意代码可以比设置属性更糟糕.它可以搞乱内存,损坏数据,泛滥线程池,甚至容易崩溃AppDomain.

问题的关键是,如果你没有自己的应用程序,因为你只提供了一个类库,你并不需要从代码运行保卫里面AppDomain,你的类加载.

注意:Re.NuGet,我不会太担心.NuGet是一种静态工具.如果我理解正确,它不会在运行时执行任务,例如下载代码并运行它.它仅在设计时用于下载二进制文件,添加引用以及可能添加代码.我认为假设使用NuGet下载软件包的应用程序所有者将尽职尽责以确保软件包是安全的,这是完全合理的.在开发过程中,他只需要做一次.