网络安全

位置:IT落伍者 >> 网络安全 >> 浏览文章

也谈ASP.NET站点的安全


发布日期:2023年02月13日
 
也谈ASP.NET站点的安全

如果做一个项目涉及到一个网站的开发站点需要大量的数据输入和填写各种的用户资料一个兄弟对数据输入没有太上心对输入的数据没有进行必要的处理和过滤结果系统上线可怕的事情发生了第一天站点出现了各种各样的错误站点被数据撑的乱七八糟HTML的数据把站点搞的面目全非第二天站点管理员密码被修改第三天…日子还在继续…我可怜的兄弟开始焦头烂额一

一次攻击的例子

一般的web系统包括开发的web系统都涉及到数据输入的功能数据输入是一个在普通不过的操作但对于一个黑客或者蓄意要破坏你系统的人来说小小的数据输入的文本框里面蕴藏着很大的攻击系统的机会

首先也从一个现象谈起大家在编写系统的时候一般都要涉及到登陆很多人是按照下面的方法来编写登陆代码的我们结合sql语句来介绍(这里涉及的sql语句以sql SERVER为准)

dataaccessb Db=new DataAccessB();

if(dbselect(select*from admin where name=+UernameText+ and pwd=+PasswordText+)RowsCount<=)

{

responsewrite(<script>alert(用户名或密码错误)</script>);

session[admin]=;

}

else

{

session[admin]=;

servertransfer(manageraspx);

}

假如是上述的代码如果侵入者使用一点点非常的技巧就可以轻松的得到一个导致数据库错误判断的sql语句从而使系统把输入任何数据的人放入系统管理页面

下面来看看到底做了哪些手脚?

攻击者只需要在用户名和密码处输入or =就可以使得系统得到一个错误的SQL语句系统得到的错误语句如下:

select*from admin where name= OR = and pwd= OR =通过这样恆成立的SQL语句就可以得到全部的数据按照代码的判断系统将认为有符合要求的数据从而进入系统管理界面

通过诸如此类的方法侵入者可以在任何一个要输入信息的窗体输入一些非法的数据从而进入需要密码才可以进入的系统另外还可以通过在比如查询页通过输入特定的字符得到一些机密的信息等等

通过上述的介绍不难看出数据的输入是存在隐患的如果设计的时候不考虑清楚将来可是后患的那如何来安全它们呢?

最易上手的三招>>

作为数据输入篇关键是解决数据输入安全性的问题那么我们如何通过必要的手段来把数据输入这个环节做的尽可能的安全些呢?

. 对数据库角色的管理

我们在使用连接数据库的时候只要你不是使用指定角色比如aspnet这个角色访问sql SERVER 或者信任连接那么都需要在数据库连接字串里面加上一个帐户一般这个帐户都是SQL SERVER系统内开的一个帐户在实际的部署过程中很多人都习惯性的把这个帐户的权限设置成系统管理员或者对好几个库都可以操作的角色这样带来的危险是一旦此帐号使用的系统被别人注入成功的话别人将可以对数据库的一个库或者多个库发起攻击造成难以挽回的损失

建议一个系统一个帐户和权限权限按照够用就行越低越安全的准则

. 给系统加数据验证控件

结合上面的例子其实只要开发的时候给我们的输入文本框简单的加一个验证控件就可以解决问题了

只允许用户输入数字不能输入字母比如下面的数据验证验证的方法

<! 要求输入值必须是之间的数字

<asp:rangevalidator MinimumValue=

maximumvalue= Type=Integer >

这里使用了type的属性告诉系统只接受整数类型的数据另外只能在之间

另外还有一个办法就是对于综合性的数据殊输入我们可以通过stringreplace()的方式来过滤掉一些诸如= LIKE等等的敏感字符使的输入的非法数据无法正常的被数据库所执行

代码的正确写法

养成一个良好的数据库访问代码的正确写法将帮助我们减少被数据输入攻击的机会

利用参数的方式来访问操作数据库就是一个比较好的方式结合前文提到的那个攻击例子我们完全可以改造一些代码使的安全性成倍的增加

sqldataadapter Auery_Ad = new SqlDataAdapter(SELECT * FROM admin WHERE name = @user AND pwd=@pass the_connection);

sqlparameter ParamUser = Auery_AdSelectCommandParametersAdd (>>

@usersqldbvarchar);

paramuservalue= uernameText;

sqlparameter ParamPwd = Auery_AdSelectCommandParametersAdd (>>

@ pass SqlDbVarChar);

parampwdvalue= PasswordText;

最后就是要注意一下跨站攻击跨站攻击目前 FRAMWORK中也有所完善一般在传递一些含有脚本字符的数据的时候系统都会提示发现潜在的危险脚本来防止跨站的攻击但这个方式也会妨碍我们平时的一些正常的操作和效果

在nfig文件里面有如下的配置信息

<!将validaterequest设为false这样才能写入html格式代码>

<pages validateRequest=false />

设置为true的话系统将禁止html格式代码数据

小结

相信通过上述的规范编写和防范一般常规的注入式攻击和数据输入安全是可以保证的了每一个技术都有自己的特点学会利用这里技术特点和特性就可以帮助我们解决很多的实际问题安全代码的编写是可以找到很多的现成技术和资料的

               

上一篇:ASP.NET 2.0程序安全的基础知识

下一篇:分享关于ASP.NET中等安全模式的一些经验