paip.Answer 3.0 登记功能SQL注入漏洞解决方案

paip.Answer 3.0 注册功能SQL注入漏洞解决方案

paip.Answer 3.0 注册功能SQL注入漏洞解决方案

作者Attilax , 1466519819@qq.com
今天使用WebInspect 9.20扫描网站漏洞,我的网站系统是Answer 3.0 ,发现SQL注入漏洞
影响功能:注册时AJAX检测用户名重复功能。以及注册功能..

修改如下:

1.checkaccount.aspx.cs中GetResult()方法增加TRY----CATCH结构
File
dsukateo/share/checkaccount.aspx.cs

  protected string GetResult()
    {
        string Result = "";

        string Account = xParmeter.GetValidParam("Account");
        try
        {
            ...............
        }
        catch (Exception ex)
        {
            Result = ex.Message;
        }   

        return Result;
    }


2.ECustom.ChkAccount()  修改,增加一个用户名检查器和一个SQL过滤器
   public bool ChkAccount(int id, string Account)
    {
        ////ati L9.20  sql inject fix
        unameChecker c = new unameChecker();
        c.checkEx(Account);        
        Account = m.SqlFilter.filt(Account);
        //  //end
        string SQL = "SELECT id FROM Custom WHERE Account='" + Account + "'";
.............
}


3.实现用户名检查器

public class unameChecker
{
 public unameChecker()
 {
  //
  //TODO: 在此处添加构造函数逻辑
  //
 }
    public void checkEx(string uname)
    {
        if (uname.Length >= 20)
            throw new Exception("EL919:用户账号太长,请小于20位");
        if (!check(uname))             
            throw new Exception("EL9191:用户账号不符合规则,应该是英文字母加数字或者邮箱格式");
    
        
    }

    public bool check(string str)    
{      
      System.Text.RegularExpressions.Regex   reg1    
                                  =   new   System.Text.RegularExpressions.Regex(@"^[A-Za-z0-9@\.]+$");
      return   reg1.IsMatch(str);  
}


4.实现SQL过滤器

    public class SqlFilter
    {
        public SqlFilter()
        {
            //
            //TODO: 在此处添加构造函数逻辑
            //
        }

        public static string filt(string sql)
        {
            sql = sql.Replace("'", "''");
            // sql = sql.Replace("%", "'%");
            return sql;
        }
    }


再次使用WebInspect扫描,漏洞消失...