安全存放web项目数据库连接字符串
2024-07-21 02:16:00
供稿:网友
我的做法是这样:
1、在项目abc的下面建目录settings,里面有文件settings.xml,其内容是:
<?xml version="1.0" encoding="utf-8" ?>
<section name="settings">
<key name="sqlserver" value="mysvr" />
<key name="sqldatabase" value="mydb" />
<key name="sqluid" value="myid" />
<key name="sqlpwd" value="mypw" />
</section>
当然,这里就是数据库连结的基本信息。
2、在项目的web.config中,加入:
<configuration>
.....
<appsettings>
<add key="settingsfile" value=". ettings ettings.xml"></add>
</appsettings>
</configuration>
3、在global.asax.cs中:
protected void application_start(object sender, eventargs e)
{
setconnectionstring();
}
private void setconnectionstring()
{
string sserver, sdb, suid, spwd, strsettingsfile;
strsettingsfile = system.web.httpcontext.current.server.mappath("//abc//") + system.configuration.configurationsettings.appsettings["settingsfile"];
application["databaseconnectionstring"] = "";
try
{
sserver = clscommon.readsettings(strsettingsfile, "sqlserver");
sdb = clscommon.readsettings(strsettingsfile, "sqldatabase");
suid = clscommon.readsettings(strsettingsfile, "sqluid");
spwd = clscommon.readsettings(strsettingsfile, "sqlpwd");
application["databaseconnectionstring"] = "server=" + sserver.trim() + ";database=" + sdb.trim() + ";uid=" + suid.trim() + ";pwd=" + spwd.trim() + ";";
}
catch(exception excp)
{
throw(excp);
}
}
这里,从web.config中读到setting.xml所在的相对路径,然后找到服务器上的文件,再读取其内容,就设定了application级别的变量databaseconnectionstring,当然,如果是要求各个session的连接字符串不一定相同,可以改成session级别的。
4、在第3步中,用到的读取xml文件的函数实现如下:
using system;
using system.xml;
using system.data;
using system.data.sqlclient;
using system.io;
using system.text;
using system.web;
namespace abc
{
/// <summary>
/// summary description for clscommon.
/// </summary>
public class clscommon: abc
{
private const string notfound = "<<nothing>>";
public clscommon()
{
//
// todo: add constructor logic here
//
}
static public string readsettings(string strsettingsfile , string skey)
{
xmltextreader xmltr = new xmltextreader(strsettingsfile);
xmldocument m_xmldocument = new xmldocument();
m_xmldocument.load(xmltr);
xmltr.close();
string strresult;
strresult = getsettingstr(m_xmldocument, "settings", skey, "");
return strresult;
}
static public string getsettingstr( xmldocument xmldocument , string sectionname , string keyname, string defaultvalue )
{
string skeyvalue ;
skeyvalue = _getsetting(xmldocument, sectionname, keyname);
if (skeyvalue == notfound )
skeyvalue = defaultvalue;
return skeyvalue;
}
static public string _getsetting(xmldocument xmldocument ,string sectionname ,string keyname )
{
string skeyvalue;
xmlnode xnsection;
xmlnode xnkey ;
xnsection = xmldocument.selectsinglenode("//section[@name='" + sectionname + "']");
if(xnsection == null )
skeyvalue = notfound;
else
{
xnkey = xnsection.selectsinglenode ("descendant::key[@name='" + keyname + "']");
if( xnkey == null )
skeyvalue = notfound;
else
skeyvalue = xnkey.attributes["value"].value;
}
xnkey = null;
xnsection = null;
return skeyvalue;
}
}
总结:安全存放web项目的数据库连接字符串,可以把它保存在另一个目录的xml文件中,易于维护、更换,同时,可以设置此xml设置文件只允许asp_net用户访问,实现了安全保护。
回复人: cuike519(studing sps(修练中...)) ( ) 信誉:100 2004-07-03 19:06:00 得分: 0
支持!!!
可是放在web.config里面有什么不安全的?如果在web.config里面不安全放在其他的目录里面就更不安全了!你可以做一个简单的试验,放一个xml文件和web.config在一起,web.config你打不开但是那个xml文件肯定可以打开!
回复人: athossmth(athos) ( ) 信誉:100 2004-07-03 19:24:00 得分: 0
哪里哪里,当然了,一般在web.config中就足够了。
是这样的,我们这里的控制要求是,最后项目projectabc发布的目录是:
/ ervera/c$/apps/projectabc/
而连接字符串要放到
/ ervera/c$/apps ettings ettingabc.xml
里,在project的iis virtual directory之外,统一管理。
本文原发表于 http://community.csdn.net/expert/topic/3143/3143428.xml
注册会员,创建你的web开发资料库,