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

  • :aspxer  Դ:internet  :2007-4-28 23:46:19  ؼ:.net,asp.net,asp
  • ⑶ 上述数据的密码签字。

    ■ 解决方案

    设置EnableViewStatMAC="true",启用__VIEWSTATE数据加密功能。然后,将machineKey验证类型设置成3DES,要求ASP.NET用Triple DES对称加密算法加密ViewState数据。

    2.4 SQL注入式攻击

    ◎ 使用SQL参数API

    正如前文“篡改参数”部分描述的,攻击者可以在输入域中插入特殊字符,改变SQL查询的本意,欺骗数据库服务器执行恶意的查询。

    ■ 风险分析

    恶意查询有可能获取后端数据库保存的任何信息,例如客户信用卡号码的清单。

    ■ 解决方案

    除了前面介绍的办法——用程序代码确保输入内容只包含有效字符,另一种更加健壮的办法是使用SQL参数API(例如ADO.NET提供的API),让编程环境的底层API(而不是程序员)来构造查询。

    使用这些API时,开发者或者提供一个查询模板,或者提供一个存储过程,然后指定一系列的参数值,由底层API将参数值嵌入到查询模板,然后将构造出来的查询提交给服务器查询。这种办法的好处是确保参数能够正确地嵌入,例如,系统将对引号进行转义处理,从根本上杜绝SQL注入式攻击的发生。同时,在表单中引号仍是一个允许输入的有效字符,这也是使用底层API的一个优点。

    按照这种思路修改前文“篡改参数”部分的例子,结果如下:

    SqlDataAdapter my_query = new SqlDataAdapter("SELECT * FROM accounts

    WHERE acc_user= @user AND acc_password=@pass", the_connection);

    SqlParameter userParam = my_query.Select_Command.Parameters.Add(

    "@user",SqlDb.VarChar,20);

    userParam.Value=user;

    SqlParameter passwordParam = my_query.Select_Command.Parameters.Add(

    "@",SqlDb.VarChar,20);

    passwordParam.Value=password;

    2.5 跨站脚本执行

    ◎ 对外发的数据进行编码

    跨站脚本执行(Cross-site scripting)是指将恶意的用户输入嵌入到应答(HTML)页面。例如,下面的ASP.NET页面虽然简单,却包含着一个重大的安全缺陷:

    <%@ Page Language="vb" %>

    <asp:Label id="Label1" runat="server">

    标签文字

    </asp:Label>

    <form method="post" runat="server" ID="Form1">

    请在此处输入反馈信息<br>

    <asp:Textbox ID="feedback" runat="server"/><br>

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