0

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

4

2 回答 2

1

诶?所有这些节目都是 OrmLite API,让您执行原始 SQL 字符串?最后,每个 ORM 都将使用ADO.NET 的底层 API来执行原始 SQL。

大多数OrmLite API 都是在其值被转义并免受 SQL 注入攻击的地方键入的。但由于 OrmLite 是一个通用的 ORM,它还提供了自定义 API,让您可以执行 Raw SQL,但即使在这种情况下,您也可以通过使用参数化查询来保护自己免受 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 });

此外,前几行看起来像是来自Dapper 的实习版本,这是另一个为了方便而嵌入在 OrmLite 中的 Micro ORM,但 OrmLite 本身并未使用。与 OrmLite 一样,它提供了自定义 SQL API,它还允许您使用参数化参数并且不受 SQL 注入攻击的攻击。

于 2014-10-29T17:23:52.247 回答
0

During a code-readout with VeraCode the suggested proper remediation was to replace ServiceStack ORM with EntityFramework 6.1.

This was only a minor update to the repositories pattern currently in place.

于 2015-02-19T21:39:38.687 回答