Welcome to Rolland Town which Record fire's life.
« »
2009年07月12日代码生活

197 views

.NET1.1Framework说,千万别让我的程序跑2.0下

  自从三年前用.Net1.1的框架写了最后一个ASP.NET的程序后再也没有捣鼓和.NET相关的东西,而是基本都把业余时间投入到了Solaris和Oracle。没想到几天前却发现那个程序被人攻击了。

  仔细看过对方服务器配置之后,发现两个问题:

  1、原来基于1.1的框架写的,结果应用却跑在2.0下,后台登陆的requiredfieldvalidator失效。

  2、web.config中的配置错误,导致“管理员”身份登录验证失效。下面是验证代码:

//1表示用户类型选择的是管理员
private string LoginMessage(string uid, string pwd,string loginType)
               {
                       string erroMessage = "";
                       string configServer = ConfigurationSettings.AppSettings["dbserver"];
                       switch (loginType)
                       {
                               case "0":
                                       erroMessage = "请选择您所属的用户类型!";
                                       break;
                               case "1":
                                       string sqlstr = "server=" + configServer + ";uid=" + uid +
";PWD=" +pwd +";DATABASE=jwc";
                                       SqlConnection myConnection = new SqlConnection(sqlstr);
                                       try
                                       {
                                               myConnection.Open();
                                       }
                                       catch (SqlException exp)
                                       {
          &nbs
p;                                    if (exp.Number == 18456)
                                               {
                                                       erroMessage = "登陆错误,请确认您的用户名和密码,否则请勿尝试登陆!";
                                               }
                                               myConnection.Close();
                                       }
                                       break;
                               case "2":
                                       string countUser = "select count(*) from sectionUser where
sectionUserID =" + uid + "";
                                       string testUser =  "select sectionUserPwd from sectionUser where
sectionUserID ="  + uid + "";
                                       int n = myDb.GetCount(countUser);
                                       if (n>0)
                                       {
                                               string result = myDb.GetDbString(testUser);
                                               if(pwd != result)
                                               {
                                                       erroMessage = "登陆错误,请确认您的用户名和密码,否则请勿尝试登陆!";
             &
nbsp;                                 }
                                       }
                                       else
                                       {
                                               erroMessage = "登陆错误,请确认您的用户名和密码,否则请勿尝试登陆!";
                                       }
                                       break;
                       }
                       return erroMessage;
               }

  第一个问题,很好解决。卸载IIS的所有.NET版本,然后重新安装。最后配置站点的时候将1.1和2.0分别设置两个程序池。站点属性里一定要设置对,1.1的程序别设成2.0。

  第二个问题,当时很迷糊,也没有找到原因。因为程序代码在我本地调试正常,本地和服务器唯一的区别就是我没有安装2.0的框架。最后一句句检查web.config后确认原因,就是web.config中:<add key="dbstring" value="user id=xx; password=xxx; database=xxx; server=xxxx" />server项没有设置对。改之!

  本来还想将程序重新测试一下,但是实在觉得得不偿失,1.1多久远的事情了,改明儿用java重写这个站点的程序吧(算是练习java)。这反映一个问题,微软现在都.NET4.0了,如果向下兼容还做成这样,一定要让用户去确定框架,实在不是多完美的事情。

版权声明 »

可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
本文url:http://netfire.name/archives/20090712/336.html

日志信息 »

该日志于2009-07-12 15:14由 NetFire 发表在代码生活分类下, 评论已关闭。

AdSense »

没有评论

抱歉,评论被关闭

返回顶部