javascript - 如何防止客户端/服务器两侧文本框的sql注入(inject)

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

我对文本框有疑问。

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

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

谁能为我提供解决方案?

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

最佳答案

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

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

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

string encodedString = 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, "");

结果将是:

or 11; -- html

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

using (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- 服务器端使用您自己的怀疑和顾虑规则)。

关于javascript - 如何防止客户端/服务器两侧文本框的sql注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12275771/

相关文章:

asp.net - 如何在类里面访问浏览器版本

Javascript 变量的 “Value” 属性未出现在 Intellisense Insted 显示值中

c# - 如何在多个项目中使用 useLegacyV2RuntimeActivationPolicy?

javascript - 放大弹出窗口不适用于由数据表创建的按钮

javascript - 在链接上返回 false 单击 jquery

c# - 在没有用户名的情况下连接到 SignalR 中的特定用户

visual-studio - 有没有办法强制 Visual Studio 在同一窗口中从资源管理器打开文件?

c++ - 关于void函数的问题

javascript - 在 CoffeeScript 中定义 BootstrapValidator 回调

javascript - 一般提交表中的 javascript 函数