我遇到了一些不安全的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内核。我需要一个解决方案。
发布于 2019-11-21 16:37:41
避免SQL注入的最安全的方法是使用参数化查询。
正如this link中的SQLkata文档所说的那样,它确实主要使用参数来构建执行的this link。在同一链接中,有一些函数不使用参数。
因为有更多的安全函数,而不是不安全的函数,所以我在文档中复制粘贴are documented to use参数的函数名称:
顺便说一句,如果您正在使用具有分析器的数据库,则可以监视数据库中实际执行的SQL,并检查是否使用了参数。这在使用封闭源代码组件时非常有用。例如,在SQL Server中,您有SQL Server Profiler和SQL Server监视器(集成在SQL Server Management Studio中)
发布于 2019-11-22 03:46:10
默认情况下,SqlKata是安全的,如果您遵循建议,它可以保护您免受SQL注入。
a.使用原生方法构建@bradbury9建议的查询
var name = "unsafe string value here";
query.Where("Name", name);b.使用Raw方法时,请确保使用参数占位符
var name = "unsafe string value here";
query.WhereRaw("[Name] = ?", name);c.最重要的一点是避免使用SqlResult.ToString()来执行查询。
提供的示例是完全安全的,因为SqlKata使用了参数绑定技术,在这里,记录器通过用占位符替换实际值来做一些额外的工作,以显示最终结果。
https://stackoverflow.com/questions/58970365
复制相似问题