在什么情况下nhibernate会运行没有参数的查询?

时间:2015-09-01 16:29:43

标签: sql nhibernate fluent-nhibernate

在开发应用程序的笔测试中,由于NH执行不带参数的查询而是在查询中直接注入字符串,因此我有一个可怕的结果,其中有一个成功的SQL注入。

我们正在使用NHibernate 4和Fluent NHibernate 1.4。 Dialect是针对SQL Azure运行的SQL 2008。

成功的查询看起来像这样(从SQL Azure审核日志中提取)

select columns from [Table] table0_ where table0_.TenantId='1555%00';IF(5672=5672) SELECT 5672 ELSE DROP FUNCTION GziQ--' and table0_.Active=1

正如您所看到的,可注入字符串能够终止字符串并注入DROP FUNCTION,然后注释掉语句的其余部分。

在本地运行并使用NHibernate Profiler,我们看到值作为预期参数传递:

select columns from [Table] table0_ where table0_.TenantId = @p0 and table0_.Active=1

在代码方面,使用IQueryable接口查询数据(代码内联和简化代码):

Session.Query<TEntityType>().Cachable().Table.SingleOrDefault(k => k.TenantId == tenantId && k.Active);

在什么情况下NHibernate不会参数化这个查询,而是将字符串直接注入到纯SQL语句中?

0 个答案:

没有答案