我的 ASP.NET MVC 4 应用程序使用 MS-SQL 用户定义函数进行全文搜索。我关注了这篇文章并创建了以下代码:
在模型类中:
if (suchstring.Trim() != "")
{
//search for each piece separated by space:
var such = suchstring.Split(' ');
int index = 0;
foreach (string teil in such)
{
index++;
if (teil.Trim() != "")
{
res = res.Join(db.udf_FirmenSucheMultiple(string.Format("\"{0}*\"", teil), index), l => l.ID, s => s.KEY, (l, s) => l);
}
}
}
映射功能:
[EdmFunction("TQCRMEntities", "udf_AnsprechpartnerFirmaSuche")]
public virtual IQueryable<udf_AnsprechpartnerFirmaSuche_Result> udf_AnsprechpartnerFirmaSucheMultiple(string keywords, int index)
{
string param_name = String.Format("k_{0}", index);
var keywordsParameter = keywords != null ?
new ObjectParameter(param_name, keywords) :
new ObjectParameter(param_name, typeof(string));
return ((IObjectContextAdapter)this).
ObjectContext.CreateQuery<udf_AnsprechpartnerFirmaSuche_Result>(
String.Format("[TQCRMEntities].[udf_AnsprechpartnerFirmaSuche](@{0})", param_name), keywordsParameter);
}
SQL 用户定义函数:
create function udf_AnsprechpartnerFirmaSuche
(@keywords nvarchar(4000))
returns table
as
return (select [KEY], [rank] from containstable(AnsprechpartnerFirma, *, @keywords, LANGUAGE 1031))
如果我尝试搜索“我会收到 500 服务器错误(来自 SQLServer 的语法错误)。
我的问题是我的应用程序是否容易受到 SQL 注入的影响,以及我应该如何防范它们。
从输入中删除 * 和 " 是否可以保存?