1

我的文本框有问题。

  1. 当用户在文本框中写东西时,它会保存它但是sql查询或错误的文本或自动注入数据库的东西,我不知道它发生了什么;它在数据库中保存虚假数据。

  2. 我在想sql是由文本格式自动注入的。

谁能为此提供解决方案?

我不能将我的文本框限制为特殊字符,这就是我面临这么多问题的原因。

4

2 回答 2

3

如果无法过滤 Textbox,则必须过滤 Postback 中的数据。

  • 使用Server.HtmlEncode(your text here)转义通常用于 SQL 注入的字符:

字符串 userInput = @"' 或 1=1; -- ";

字符串编码字符串 = Server.HtmlEncode(userInput);

结果将是:

' or 1=1; -- <html>
  • 使用 Regex 将无效字符替换为空格或任何指示字符已被替换的内容(使用 *):
Regex myRegex = new Regex("[\\\'\\\"\\<\\>=]", RegexOptions.Compiled | RegexOptions.IgnoreCase);
string userInput = @"' or 1=1; -- <html>";
string encodedString = myRegex.Replace(userInput, "");

结果将是:

或 11;-- html

  • 在 SQL 查询中使用参数并在添加之前验证值

使用 (SqlConnection cn = new SqlConnection("Your Connection string here")) {

            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
                }
            }
        }
  • 有准备使用的自定义控件和选项来控制用户可以在指定文本框中输入的内容。
  • Web 编程中的最后一条建议是,您必须仔细检查(1- 客户端使用 JavaScript)和(2- 服务器端使用您自己的怀疑和关注规则)。
于 2012-09-05T07:56:18.233 回答
0

可能的解决方案:

  1. 加密敏感数据。

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

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

  4. 确保数据有效。

  5. 进行代码审查以检查二阶攻击的可能性。

  6. 使用参数化查询。

  7. 使用存储过程。

  8. 重新验证存储过程中的数据。

  9. 确保错误消息不会泄露应用程序或数据库的内部架构。

有关详细信息,请参阅参考:Injection-Attacks-and-Some-Tips-on-How-to-Prev

于 2012-09-05T06:48:00.773 回答