原文链接:https://www.zhihu.com/question/565076777
首先考虑使用参数化查询,参数化查询是数据库程序设计中最有效的防止SQL注入的方法,因为参数化查询将参数值作为独立的参数传递给数据库,而不是将参数值嵌入到SQL语句中。
例如:
string sql = "Select * From User WHERE UserName=@UserName";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add("@UserName", SqlDbType.VarChar, 50).Value = txtUserName.text;
SqlDataReader reader = cmd.ExecuteReader();
其次还可以考虑使用正则表达式或其他技术来检查用户输入的特殊字符,如果发现特殊字符,则拒绝执行操作。
比如:
string strUserName = txtUserName.text;
if (Regex.IsMatch(strUserName, @"^[a-zA-Z0-9_]+$"))
{
string sql = "Select * From User WHERE UserName='" + strUserName + "'";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader reader = cmd.ExecuteReader();
}