1

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

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

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 注入。

4

3 回答 3

3

使用参数化查询如下:

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;

看看这个文件。

于 2013-07-01T08:40:59.410 回答
1

尝试

 SqlCommand comm = new SqlCommand("SELECT * FROM news
            Where newstilte LIKE '%' + @newstilte + '%'", conn);

 comm.Parameters.AddWithValue("@newstilte",searchbox.text)
于 2013-07-01T08:40:55.270 回答
1

使用带参数的存储过程。

.net SQL 库正确

SqlCommand comm = new SqlCommand("StoredProcedureName")
comm.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@Parameter", Value)

.net 库应该处理大多数注入。

于 2013-07-01T08:41:21.507 回答