Javascript 如何防止客户端/服务器两侧文本框的sql注入
我对文本框有问题Javascript 如何防止客户端/服务器两侧文本框的sql注入,javascript,asp.net,visual-studio-2010,c#-4.0,Javascript,Asp.net,Visual Studio 2010,C# 4.0,我对文本框有问题 当用户在文本框中写入内容时,它会将其保存,但sql查询或坏文本或自动注入数据库的内容,我不知道它发生了什么;它将错误数据保存在数据库中 我认为sql是通过文本格式自动注入的 有谁能为我提供一个解决方案吗 我无法将文本框限制为特殊字符,这就是我面临如此多问题的原因。可能的解决方案: 加密敏感数据 使用具有最低权限的帐户访问数据库 必要的 使用具有最低权限的帐户安装数据库 必要的 确保数据有效 进行代码检查,检查是否存在二阶错误 攻击 使用参数化查询 使用存储过程 重新验证存储过程
有关详细信息,请参阅参考:如果无法过滤文本框,则必须过滤回发中的数据
- 使用Server.HtmlEncode(此处的文本)转义字符 通常用于SQL注入:
' or 1=1; -- <html>
- 使用正则表达式将无效字符替换为空格或任何要替换的字符 指示已替换字符(使用*):
- 可以使用自定义控件和选项来控制用户可以在指定文本框中输入的内容
- 在Web编程中的最后一个建议是,您必须仔细检查(1-客户端使用JavaScript)和(2-服务器端使用您自己的怀疑和担忧规则)
Regex myRegex = new Regex("[\\\'\\\"\\<\\>=]", RegexOptions.Compiled | RegexOptions.IgnoreCase);
string userInput = @"' or 1=1; -- <html>";
string encodedString = myRegex.Replace(userInput, "");
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = cn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Select * From [User] Where (UserName = @UserName AND Password = @Password)";
cmd.Parameters.Add("@UserName", SqlDbType.NVarChar).Value = Server.HtmlEncode(txtUserName.Text);
cmd.Parameters.Add("@Password", SqlDbType.NVarChar).Value = Server.HtmlEncode(txtPassword.Text);
cn.Open();
IDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
// Your code here
}
}
}