使用反射将连接字符串添加到ConfigurationManager.ConnectionString的危险

时间:2013-08-04 04:28:18

标签: asp.net reflection connection-string configurationmanager

我看过几篇文章详细介绍了如何在连接字符串添加到ConfigurationManager.ConnectionStrings时绕过ReadOnly屏障。请参阅下面一个这样的帖子的示例。这些例子中的每一个都是一个可怕而模糊的警告,即采用的技术是“危险的”。有什么危险?

Dim cssc As ConnectionStringSettingsCollection = WebConfigurationManager.ConnectionStrings
Dim t As Type = cssc.GetType().BaseType ' System.Configuration.ConfigurationElementCollection
Dim fi As FieldInfo = t.GetField("bReadOnly", BindingFlags.Instance Or BindingFlags.NonPublic)
fi.SetValue(cssc, False)

1 个答案:

答案 0 :(得分:1)

这是“危险”的一个原因是您依赖于名为bReadOnly的私有字段。该字段不是公共.NET API的一部分,可能会在未来的.NET版本中发生变化,恕不另行通知。如果发生这种情况,并且升级到该版本,则代码将不再有效。