繁体   English   中英

具有用户定义的函数和实体框架的可能的SQL注入?

[英]Possible SQL-Injection with user defined functions and entity framework?

我的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注入的攻击,以及应如何防范它们。

从输入中删除*和“是否可以保存?

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注入预防

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM