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