gpt4 book ai didi

c# - 如何在 asp 中的搜索表单中防止 SQL 注入(inject)

转载 作者:太空宇宙 更新时间:2023-11-03 20:15:08 25 4
gpt4 key购买 nike

我在一个基于新闻的网站上工作。该网站有一个新闻标题的搜索栏,我不想让 SQL 注入(inject)发生在它上面。

我所做的是从文本框中获取文本,然后使用查询来获取匹配的结果。这是用户单击搜索按钮时发生的情况:

protected void button_Click(object sender, EventArgs e)
{
string connectionString = ConfigurationManager.ConnectionStrings["connection"].ConnectionString;
SqlConnection conn = new SqlConnection(connectionString);

try
{
SqlCommand comm = new SqlCommand("SELECT * FROM news
Where newstilte LIKE '%" + searchbox.text + "%'", conn);
conn.Open();

SqlDataReader reader = comm.ExecuteReader();

myRepeater.DataSource = reader;
myRepeater.DataBind();

reader.Close();
}
catch (Exception exception)
{
Response.Write(exception.ToString());
}
finally
{
conn.Close();
}
}

如您所见,我随后使用中继器显示结果。我想知道如何在人们在文本框中写入的部分防止SQL注入(inject)。

最佳答案

如下使用参数化查询:

protected void button_Click(object sender, EventArgs e)
{
string connectionString = ConfigurationManager.ConnectionStrings["connection"].ConnectionString;
SqlConnection conn = new SqlConnection(connectionString);
try
{
SqlCommand comm = new SqlCommand("SELECT * FROM news
Where newstilte LIKE '%' + @newstilte + '%'", conn);

cmm.Parameters.AddWithValue("@search",searchbox.text) ;

conn.Open();
SqlDataAdapter reader = comm.ExecuteReader();
myRepeater.DataSource = reader;
myRepeater.DataBind();
reader.Close();
}
catch (Exception exception)
{
Response.Write(exception.ToString());
}
finally
{
conn.Close();
}
}

编辑:

如果您对搜索有数据类型限制,您也可以使用以下内容。

cmm.Parameters.Add(new SqlParameter("@search", SqlDbType.VarChar));
cmm.Parameters["@search"].Value = searchbox.text;

看看THIS文档。

关于c# - 如何在 asp 中的搜索表单中防止 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17400283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com