VeraCode报告ServiceStack OrmLite,SQL命令中使用的特殊元素中和不正确(' SQL注入')(CWE ID 89)

时间:2014-10-29 16:46:45

标签: c# sql-server sql-injection ormlite-servicestack veracode

好的,所以我在我的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吗?

2 个答案:

答案 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注入:

自定义SQL API

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。

这只是对当前存储库模式的一个小更新。