好的,所以我在我的Web API中使用ServiceStack OrmLite来满足我的数据需求。当我将代码提交给VeraCode进行代码安全扫描和验证时,结果报告显示OrmLite显示了潜在的SQL注入攻击向量。
ServiceStack.OrmLite.dll GridReader DapperMultiple(System.Data.IDbConnection, string, object, System.Data.IDbTransaction,System.Nullable<int>, System.Nullable<System.Data.CommandType>)
ServiceStack.OrmLite.dll int ExecuteCommand(System.Data.IDbConnection, System.Data.IDbTransaction, string, System.Action<System.Data.IDbCommand,object>, object, System.Nullable<int>, System.Nullable<System.Data.CommandType>)
ServiceStack.OrmLite.dll int ExecuteDapper(System.Data.IDbConnection, string, object, System.Data.IDbTransaction, System.Nullable<int>, System.Nullable<System.Data.CommandType>)
ServiceStack.OrmLite.dll object Scalar(System.Data.IDbCommand, string)
ServiceStack.OrmLite.dll System.Data.IDataReader ExecReader(System.Data.IDbCommand, string)
ServiceStack.OrmLite.dll System.Data.IDataReader ExecReader(System.Data.IDbCommand, string, System.Collections.Generic.IEnumerable<System.Data.IDataParameter>)
我不确定如何对此进行分类。我应该用EntityFramework替换OrmLite吗?
答案 0 :(得分:1)
嗯?所有这些显示的是OrmLite API,它允许您执行原始SQL字符串?最后,每个ORM都将使用ADO.NET's underlying API's来执行Raw SQL。
大多数OrmLite API's are typed其值被转义并受到SQL注入攻击的保护。但是,由于OrmLite是一个多功能的ORM,它还提供let you execute Raw SQL的自定义API,但即使在这种情况下,您也可以通过使用参数化查询来保护自己免受SQL注入:
List<Person> results = db.SqlList<Person>(
"SELECT * FROM Person WHERE Age < @age", new { age=50});
List<Poco> results = db.SqlList<Poco>(
"EXEC GetAnalyticsForWeek @weekNo", new { weekNo = 1 });
前几行看起来好像来自interned version of Dapper,这是为方便起见而嵌入OrmLite的另一个Micro ORM,但OrmLite本身并未使用。与OrmLite一样,它提供了自定义SQL API,它还允许您使用参数化参数,并且可以免受SQL注入攻击。
答案 1 :(得分:0)
在使用VeraCode进行代码读取期间,建议的适当补救措施是将ServiceStack ORM替换为EntityFramework 6.1。
这只是对当前存储库模式的一个小更新。