• 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扫描,漏洞消失...

  • 相关阅读:
    函数的定义
    函数加载的过程
    js中的return
    快速排序
    冒泡排序
    数组的案例
    正睿暑期培训day3考试
    bzoj2115 Xor
    luogu4570 元素
    bzoj4827 Hnoi2017 礼物
  • 原文地址:https://www.cnblogs.com/attilax/p/15199804.html
Copyright © 2020-2023  润新知