如果做一个项目,涉及到一个网站的开发,站点需要大量的数据输入和填写各种的用户资料,一个兄弟对数据输入没有太上心,对输入的数据没有进行必要的处理和过滤。结果系统上线可怕的事情发生了,第一天站点出现了各种各样的错误,站点被数据撑的乱七八糟,HTML的数据把站点搞的面目全非,第二天站点管理员密码被修改,第三天…。日子还在继续…我可怜的兄弟开始焦头烂额一。
一次攻击的例子
一般的web系统,包括asp.net开发的web系统都涉及到数据输入的功能,数据输入是一个在普通不过的操作,但对于一个黑客或者蓄意要破坏你系统的人来说,小小的数据输入的文本框里面蕴藏着很大的攻击系统的机会。
首先也从一个现象谈起,大家在编写asp.net系统的时候一般都要涉及到登陆,很多人是按照下面的方法来编写登陆代码的,我们结合sql语句来介绍。(这里涉及的sql语句以sql SERVER为准)。
dataaccessb Db=new DataAccessB();
if(db.select("select*from admin where name='"+Uername.Text+"' and pwd='"+Password.Text+"'").Rows.Count<=0)
{
response.write("<script>alert('用户名或密码错误')</script>");
session["admin"]="0";
}
else
{
session["admin"]="1";
server.transfer("manager.aspx");
}
假如是上述的代码,如果侵入者使用一点点非常的技巧就可以轻松的得到一个导致数据库错误判断的sql语句,从而使系统把输入任何数据的人放入系统管理页面.
下面来看看到底做了哪些手脚?
攻击者只需要在用户名和密码处输入or 1=1,就可以使得系统得到一个错误的SQL语句,系统得到的错误语句如下:
"select*from admin where name='' OR 1=1 and pwd='' OR 1=1''通过这样恒成立的SQL语句就可以得到全部的数据,按照代码的判断,系统将认为有符合要求的数据,从而进入系统管理界面。
通过诸如此类的方法侵入者可以在任何一个要输入信息的窗体输入一些非法的数据从而进入需要密码才可以进入的系统,另外还可以通过在比如查询页,通过输入特定的字符得到一些机密的信息,等等。
通过上述的介绍,不难看出数据的输入是存在隐患的,如果设计的时候不考虑清楚,将来可是后患的.那如何来安全它们呢?
二.最易上手的三招>>
作为数据输入篇关键是解决数据输入安全性的问题,那么我们如何通过必要的手段来把数据输入这个环节做的尽可能的安全些呢?
1. 对数据库角色的管理
我们在使用asp.net连接数据库的时候,只要你不是使用指定角色,比如aspnet这个角色访问sql SERVER 2000,或者信任连接。那么都需要在数据库连接字串里面加上一个帐户。一般这个帐户都是SQL SERVER系统内开的一个帐户。在实际的部署过程中很多人都习惯性的把这个帐户的权限设置成系统管理员,或者对好几个库都可以操作的角色。这样带来的危险是一旦此帐号使用的系统被别人注入成功的话,别人将可以对数据库的一个库或者多个库发起攻击,造成难以挽回的损失。
建议一个系统一个帐户和权限。权限按照够用就行,越低越安全的准则。
2. 给系统加数据验证控件
结合上面的例子,其实只要开发的时候给我们的输入文本框简单的加一个验证控件就可以解决问题了。