• λ我爱Aspx >> C#.Net >> 五种常见的ASP.NET安全缺陷_ASP.NET技巧
  • 五种常见的ASP.NET安全缺陷_ASP.NET技巧

  • :aspxer  Դ:internet  :2007-4-28 23:46:19  ؼ:.net,asp.net,asp
  • "SELECT * FROM accounts WHERE acc_user='" + user + "' AND acc_password='" + 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中显式保存的数据。

    Ҷƪл˵?
  • һƪSql语句密码验证的安全漏洞_数据库安全
    һƪMssql和Mysql的安全性分析_数据库安全