首页 > 开发 > 综合 > 正文

安全存放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开发资料库,
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表