通过COM对象将web.config中的加密连接字符串转换为经典的asp

时间:2012-02-04 00:11:06

标签: asp-classic

我们如何访问COM对象中的web.config连接字符串?我无法获得web.config文件的句柄。请帮忙

我有一个经典的asp应用程序需要加密到数据库的connectionString。该站点当前有一个database.asp文件,该文件包含在所有页面中以获取连接。安全团队要求我们删除明文用户名,密码和服务器名称。我试图创建一个COM对象来获取来自应用程序根目录的加密cionnectionstring的web.config文件,然后将connString作为变量传递回来用于

Set cn = Server.CreateObject("ADODB.Connection")
cn.CursorLocation = 3
set cnStringReader = Server.CreateObject("PropertyReader.FetchProperty")
cnString = cnStringReader.getProperty();
cn.ConnectionString(cnString) 

但COM对象找不到web.config文件。我已将COM对象保存在Web应用程序目录的bin目录中。并使用gacutil注册。

请帮忙。

2 个答案:

答案 0 :(得分:1)

当ASP CreateObject构造您的COM组件时,它无法将Web应用程序上下文传递给基础.NET组件。该组件被加载到标准的默认AppDomain中,就像您在.vbs文件中使用了CreateObject并使用脚本shell来执行它一样。

因此,标准.NET OpenWebConfiguration没有网站上下文,可以从中确定“/”表示的物理路径,从而确定要加载的web.config文件。

如果您可以解析站点名称(如IIS管理器所示),那么您可以使用另一个OpenWebConfiguration重载,它将站点名称作为第二个参数。

你是否可以用这种方式读取加密连接字符串可能是另一回事,我会怀疑它。我从来没有尝试过,但如果可以,我会质疑首先加密它们的价值。配置部分加密的方法表明只有注册了encyrption的应用程序才能解密。您的COM组件不属于此应用程序。

就个人而言,如果你必须遵守“安全小组”的boffins,你可以向他们询问他们如何做的建议。我的方法是使用SSPI集成安全性,因此无需以任何形式存储任何用户名/密码对。

答案 1 :(得分:0)

从ASP Classic中,您必须像普通的XML文件一样阅读web.config(即使用XmlDocument)。这需要一个完整的web.config文件路径,您可以从Request.ServerVariables("APPL_PHYSICAL_PATH") +“web.config”获取该文件。

请注意,由于您正在像普通XML文件一样阅读web.config,因此WebConfigurationManager中的加密实用程序不起作用。你必须自己加密。

小心调用ASP Classic包装在COM包装器中的.NET对象。它可能会变得奇怪。

http://connect.microsoft.com/VisualStudio/feedback/details/294241/kb937143-breaks-asp-to-net-com-interop

http://support.microsoft.com/kb/945701