1

我遇到了一些不安全的 SqlKata 函数:

例子

public class TestRepository
{
    private readonly QueryFactory _queryFactory;

    public TestRepository(QueryFactory queryFactory)
    {
        _queryFactory = queryFactory;
    }

    public IList<TestResult> TestFunction(string value)
    {
        var query = _queryFactory.Query("MyTableName");
        query.Where("MyColumnName", value);
        return query.Get<TestResult>();
    }
}

和输出:

--> output --> sqlkata query log
--> select * from MyTableName where MyColumnName = 'Select Id from Users where Nickname = ''Admin'''

我必须使用 SqlKata 和 asp.net 核心。我需要一个解决方案。

4

2 回答 2

2

避免 SQL 注入的最安全方法是使用参数化查询。

正如此链接中的 SQLkata 文档所说,它确实主要使用参数来构建执行的 SQL。在同一个链接中,有一些函数不使用参数。

因为有更多安全函数而不是不安全函数,所以我复制粘贴了文档中记录的函数名称,以使用文档中的参数:

  • WhereNull
  • 哪里真
  • 哪里假

附带说明一下,如果您正在使用具有分析器的数据库,您可以监视在数据库中执行的实际 SQL 并检查是否使用了参数。这在使用封闭源代码组件时很有用。例如,在 SQL Server 中,您有SQL Server Profiler和 SQL Server 监视器(集成在 SQL Server Management Studio 中)

于 2019-11-21T08:37:40.713 回答
1

默认情况下,SqlKata 是安全的,如果您遵循建议,可以保护您免受 SQL 注入。

一个。按照@bradbury9 的建议,使用本机方法构建查询

var name = "unsafe string value here";
query.Where("Name", name);

湾。使用 Raw 方法时,请确保使用参数占位符

var name = "unsafe string value here";
query.WhereRaw("[Name] = ?", name);

C。最重要的是避免使用SqlResult.ToString()来执行查询。

提供的示例是完全安全的,因为 SqlKata 使用参数绑定技术,这里记录器通过用占位符替换实际值来做一些额外的工作,以显示最终结果。

于 2019-11-21T19:46:09.690 回答