Javascript 如何防止客户端/服务器两侧文本框的sql注入

Javascript 如何防止客户端/服务器两侧文本框的sql注入,javascript,asp.net,visual-studio-2010,c#-4.0,Javascript,Asp.net,Visual Studio 2010,C# 4.0,我对文本框有问题 当用户在文本框中写入内容时,它会将其保存,但sql查询或坏文本或自动注入数据库的内容,我不知道它发生了什么;它将错误数据保存在数据库中 我认为sql是通过文本格式自动注入的 有谁能为我提供一个解决方案吗 我无法将文本框限制为特殊字符,这就是我面临如此多问题的原因。可能的解决方案: 加密敏感数据 使用具有最低权限的帐户访问数据库 必要的 使用具有最低权限的帐户安装数据库 必要的 确保数据有效 进行代码检查,检查是否存在二阶错误 攻击 使用参数化查询 使用存储过程 重新验证存储过程

我对文本框有问题

  • 当用户在文本框中写入内容时,它会将其保存,但sql查询或坏文本或自动注入数据库的内容,我不知道它发生了什么;它将错误数据保存在数据库中

  • 我认为sql是通过文本格式自动注入的

  • 有谁能为我提供一个解决方案吗

    我无法将文本框限制为特殊字符,这就是我面临如此多问题的原因。

    可能的解决方案:

  • 加密敏感数据

  • 使用具有最低权限的帐户访问数据库 必要的

  • 使用具有最低权限的帐户安装数据库 必要的

  • 确保数据有效

  • 进行代码检查,检查是否存在二阶错误 攻击

  • 使用参数化查询

  • 使用存储过程

  • 重新验证存储过程中的数据

  • 确保错误消息不会泄露任何有关内部 应用程序或数据库的体系结构


  • 有关详细信息,请参阅参考:

    如果无法过滤文本框,则必须过滤回发中的数据

    • 使用Server.HtmlEncode(此处的文本)转义字符 通常用于SQL注入:
    字符串userInput=@“'或1=1;--”

    字符串encodedString=Server.HtmlEncode(userInput)

    结果将是:

    ' or 1=1; -- <html>
    
    • 使用正则表达式将无效字符替换为空格或任何要替换的字符 指示已替换字符(使用*):
    • 可以使用自定义控件和选项来控制用户可以在指定文本框中输入的内容
    • 在Web编程中的最后一个建议是,您必须仔细检查(1-客户端使用JavaScript)和(2-服务器端使用您自己的怀疑和担忧规则)

    您是否在使用任何ORM或使用ado.net插入数据?是否希望为其事件或类似事件使用一些文本框代码?我认为安全性比时间更重要:)
    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
                    }
                }
            }