我对文本框有疑问。
当用户在文本框中写入内容时,它会保存它,但 sql 查询或错误文本或自动注入(inject)数据库的某些内容,我不知道它发生了什么;它在数据库中保存虚假数据。
我在想,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/