3

LIKE用语句停止 SQL 注入的最佳方法是什么?所以这里是一个代码示例:

string search = Server.HTMLDecode(userEnteredSearchText);
SqlCommand comm = new SqlCommand("SELECT Result WHERE (Keyword LIKE '%" + @search + "%') "
comm.Parameters.Add(new SqlParameter("search", search));

这是我一直在做的其他 sql 语句,它似乎是特殊字符,例如'并且%不能破坏这些语句,但我猜LIKE你需要做一个转义键或什么的语句?

4

3 回答 3

4

以下对我来说看起来更干净一些。

string search = Server.HTMLDecode(userEnteredSearchText);
SqlCommand comm = new SqlCommand("SELECT Result WHERE (Keyword LIKE @search) "
comm.Parameters.Add(new SqlParameter("search", String.Format("%{0}%", search)));
于 2013-01-05T22:52:13.253 回答
2

抱歉,引号已关闭。除了需要在SQL 中连接%'s之外,您可以像处理其他所有内容一样执行此操作。另外,HTMLDecode这里可能对你没有任何好处,对吧?如果他们想在数据库中搜索包含的东西怎么办"&"

Search = userEnteredSearchText);

SqlCommand comm = new SqlCommand("SELECT Result WHERE Keyword LIKE '%' + @search + '%'");
comm.Parameters.Add(new SqlParameter("search", search));

因此,在您的示例中,您关闭了要放入的 SQL 文字@search,这是一个无效的关键字或变量 - 您只需将其留在 SQL 语句中。其他DB的,你需要把CONCAT东西放在一起。但是绑定变量会正确地逃避驱动程序的内容。

于 2013-01-05T22:28:35.560 回答
-1

向数据库发送 sql 查询时,请确保在参数中避免使用单引号。删除 c# 代码本身的参数中存在的任何特殊字符。我建议尽可能多地避免特殊字符。

于 2013-01-05T22:42:30.967 回答