您现在的位置: 无忧电子商务网 >> 信息学院 >> 程序开发 >> asp.net >> 正文

五种常见的ASP.NET安全缺陷

作者:佚名    信息学院来源:整理    点击数:    更新时间:2008-1-30 我要参与讨论

  password, the_connection); 

  从表面上看,这几行代码毫无问题,实际上却可能引来SQL注入式攻击。攻击者只要在user输入域中输入“OR 1=1”,就可以顺利登录系统,或者只要在查询之后加上适当的调用,就可以执行任意Shell命令:

'; EXEC master..xp_cmdshell(Oshell command here')-- 

  ■ 风险分析

  在编写这几行代码时,开发者无意之中作出了这样的假定:用户的输入内容只包含“正常的”数据——合乎人们通常习惯的用户名字、密码,但不会包含引号之类的特殊字符,这正是SQL注入式攻击能够得逞的根本原因。黑客们可以借助一些具有特殊含义的字符改变查询的本意,进而调用任意函数或过程。

  ■ 解决方案

  域验证器是一种让ASP.NET开发者对域的值实施限制的机制,例如,限制用户输入的域值必须匹配特定的表达式。

  要防止上述攻击行为得逞,第一种办法是禁止引号之类的特殊字符输入,第二种办法更严格,即限定输入域的内容必须属于某个合法字符的集合,例如“[a-zA-Z0-9]*”。

  2.2 篡改参数之二

  ◎ 避免验证操作的漏洞

  然而,仅仅为每个输入域引入验证器还不能防范所有通过修改参数实施的攻击。在执行数值范围检查之时,还要指定正确的数据类型。

  也就是说,在使用ASP.NET的范围检查控件时,应当根据输入域要求的数据类型指定适当的Type属性,因为Type的默认值是String。

<!-- 要求输入值必须是1-9之间的数字 -->
<asp:RangeValidator ... MinimumValue="1" MaximumValue="9" .../> 

  ■ 风险分析

  由于没有指定Type属性值,上面的代码将假定输入值的类型是String,因此RangeValidator验证器只能确保字符串由0-9之间的字符开始,“0abcd”也会被认可。

  ■ 解决方案

  要确保输入值确实是整数,正确的办法是将Type属性指定为Integer:

<!-- 要求输入值必须是1-9之间的数字 -->
<asp:RangeValidator ... MinimumValue="1"
MaximumValue="9" Type="Integer" 

  2.3 信息泄漏

  ◎ 让隐藏域更加安全

  在ASP.NET应用中,几乎所有HTML页面的__VIEWSTATE隐藏域中都可以找到有关应用的信息。由于__VIEWSTATE是BASE 64编码的,所以常常被忽略,但黑客可以方便地解码BASE 64数据,用不着花什么力气就可以得到__VIEWSTATE提供的详细资料。

  ■ 风险分析

  默认情况下,__VIEWSTATE数据将包含:

  ⑴ 来自页面控件的动态数据。

  ⑵ 开发者在ViewState中显式保存的数据。

  ⑶ 上述数据的密码签字。

  ■ 解决方案

  设置EnableViewStatMAC="true",启用__VIEWSTATE数据加密功能。然后,将mach

上一页  [1] [2] [3] [4] 下一页

在google里搜索更多五种常见的ASP.NET安全缺陷

Google
Web www.51ec.org
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
我来说两句 对此文章发表了评论
  昵 称: *必填    ·注册用户·
  评 分: 1分 2分 3分 4分 5分     严禁发表危害国家安全、政治、黄色淫秽等内容的评论,用户需对自己在使用本网站服务过程中的行为承担法律责任。本站管理员有权保留或删除评论内容,评论内容只代表机友个人观点,与本网站立场无关。  
评 论
内 容

 
评论列表 (最新 评论仅限网友观点!)

供求信息




| 设为首页 | 加入收藏 | 关于我们 | 广告服务 | 联系方式 | 友情链接 | 版权申明