保护我的应用程序免受SQL注入

时间:2018-03-08 09:21:24

标签: c# sql winforms sql-injection

现在我在数据库中执行搜索并使用

显示结果
string keyWord = textBoxSearch.Text.ToString();
using (SqlConnection con = new SqlConnection(conString))
{
    try
    {
        con.Open();
        if (con.State == ConnectionState.Open)
        {
            using (SqlCommand cmd = new SqlCommand("SELECT articleCode, articleName FROM Article WHERE articleName LIKE '" + keyWord + "%'", con))
            {
                // Put search result in dataGrid
            }
        }
    }
}

现在关注SqlCommand.Parameters示例,我应该执行类似

的操作
string cmdQuery = "SELECT articleCode, articleName from Article WHERE articleName LIKE @articleName'";
using (SqlConnection con = new SqlConnection(conString))
{
    using (SqlCommand cmd = new SqlCommand(cmdQuery, con))
    {
        cmd.Parameters.Add("@articleName", SqlDbType.NVarChar);
        cmd.Parameters["@articleName"].Value = textBoxSearch.Text;
        try
        {
            // Put search result in dataGrid
        }
    }
}

但我真的不明白这有多么不同,因为我仍然需要使用原始的textBoxSearch.Text值。 我这样做了吗?

1 个答案:

答案 0 :(得分:0)

要保护网站免受SQL注入,您可以使用SQL参数。 SQL参数是在执行时以受控方式添加到SQL查询的值。

示例:

txtUserId = getRequestString("UserId");
sql = "SELECT * FROM Customers WHERE CustomerId = @0";
command = new SqlCommand(sql);
command.Parameters.AddWithValue("@0",txtUserID);
command.ExecuteReader();

SQL引擎检查每个参数以确保它的列正确并按字面处理,而不是作为要执行的SQL的一部分。

查看this了解详情。

是的,你仍然可以使用文本框来获取价值。