【问题标题】:how to prevent from sql injection for text boxes on both sides client / server如何防止客户端/服务器两侧文本框的sql注入
【发布时间】:2012-09-05 06:39:29
【问题描述】:

我的文本框有问题。

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

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

谁能为此提供解决方案?

我无法限制我的文本框输入特殊字符,这就是我面临这么多问题的原因。

【问题讨论】:

标签: javascript asp.net visual-studio-2010 c#-4.0


【解决方案1】:

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

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

string userInput = @"' or 1=1; -- ";

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

结果将是:

' or 1=1; -- <html>
  • 使用正则表达式将无效字符替换为空格或任何内容 表示字符已被替换(使用 *):
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- 服务器端使用您自己的怀疑和关注规则)。

【讨论】:

    【解决方案2】:

    可能的解决方案:

    1. 加密敏感数据。

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

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

    4. 确保数据有效。

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

    6. 使用参数化查询。

    7. 使用存储过程。

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

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

    详情见参考:Injection-Attacks-and-Some-Tips-on-How-to-Prev

    【讨论】:

    • 我认为安全比时间更重要:)
    猜你喜欢
    • 1970-01-01
    • 2012-08-01
    • 2016-03-03
    • 2018-01-04
    • 2021-07-17
    • 1970-01-01
    • 2019-02-03
    • 2019-11-09
    • 1970-01-01
    相关资源
    最近更新 更多