可能使用用户定义的函数和实体框架进行SQL注入

本文关键字:框架 实体 注入 SQL 函数 用户 定义 | 更新日期: 2023-09-27 18:25:34

我的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的Syntaxerror)

我的问题是,我的应用程序是否容易受到SQL注入的攻击,以及我应该如何防范它们。

是否保存为仅从输入中删除*和"?

可能使用用户定义的函数和实体框架进行SQL注入

来源http://msdn.microsoft.com/en-us/library/ms189760.aspx

CONTAINSTABLE在Transact-SQL SELECT语句的FROM子句中使用,并且被引用时将其视为常规表名。它对包含基于字符的数据类型的全文索引列执行SQL Server全文搜索。

如果你阅读了Quassnoi关于在全文索引中搜索双引号的回答:

标点符号被忽略。因此,CONTAINS(测试,"计算机故障")将一行与值匹配,"我的计算机在哪里?找不到它会很昂贵。"

文档可在此处找到。

有关使用LIKE运算符的替代方法,请参见他的答案。

回答您的问题:

我的问题是,我的应用程序是否容易受到SQL注入的攻击,以及我应该如何防范它们。

您在UDF中正确地使用了参数。它应该是安全的,不会被SQL注入。

是否保存为仅从输入中删除*和"?

没有。永远不要试图将字符列入黑名单以阻止SQL注入。你几乎肯定会失败。

有关详细信息,请参阅OWASP SQL注入预防。