.net 转义SQL参数

.net 转义SQL参数,.net,sql,nhibernate,hql,parameters,.net,Sql,Nhibernate,Hql,Parameters,我需要解决我报告的NHibernate错误。本质上,NHibernate将为同一个HQL参数生成多个SQL参数,这会导致在分组构造中使用参数的查询出现问题 在修复错误之前,我想我应该将参数连接到HQL中。显然,这很容易受到SQL注入的影响,除非我转义参数值(因为它是HQL,所以我不能使用常规ADO.NET参数) System.Data中是否有某种方法可以转义参数值,从而可以安全地连接到SQL字符串中?我使用的是SQLServer2005,我很乐意在短期内做一些特定于该平台的事情,直到修复NHib

我需要解决我报告的NHibernate错误。本质上,NHibernate将为同一个HQL参数生成多个SQL参数,这会导致在分组构造中使用参数的查询出现问题

在修复错误之前,我想我应该将参数连接到HQL中。显然,这很容易受到SQL注入的影响,除非我转义参数值(因为它是HQL,所以我不能使用常规ADO.NET参数)

System.Data中是否有某种方法可以转义参数值,从而可以安全地连接到SQL字符串中?我使用的是SQLServer2005,我很乐意在短期内做一些特定于该平台的事情,直到修复NHibernate错误

谢谢,
肯特

据我所知,没有任何东西可供您使用(类似于图书馆的东西也可以)。您可以做一件保护您的事情,就是简单地检查您的参数值(即您要连接的内容)是否有任何空格,如果它包含空格,则抛出一个异常-这应该可以保护您免受注入方面的任何破坏。当然,只有在连接一个不需要查找实际包含空格的值的参数时,这才是一个可行的解决方案,但是我认为这是一个有限的方案。

唉,这正是我的方案。它基本上是我要匹配的一个类别名称,可以包含空格。在最坏的情况下,我会检查引号并抛出参数值中是否有引号。哈,数字就是这样。如果您通读另一个SO线程(此处:),它提供了一些非常好的代码,可以防止绝大多数情况,但您几乎总是容易受到不可打印的密钥攻击(即退格)。酷-谢谢。现在,我已经添加了一个非常严格的检查,以确保输入匹配一个正则表达式
@“^[a-Za-z\:\,]*$”
。如果没有,则抛出异常。我不明白为什么要按用户输入分组?按常量分组…这会给出一个查询的值是什么?抱歉,如果这是个愚蠢的问题。