9

传统主义者认为,与使用 NHibernate 等对象关系映射 (ORM) 框架相比,存储过程提供了更好的安全性。

为了反驳这个论点,NHibernate 可以使用哪些方法来确保适当的安全性(例如,防止 sql 注入等)?

每个答案请只提供一种方法

4

7 回答 7

7

保护您的连接字符串。

从 .NET 2.0 和 NHibernate 1.2 开始,很容易在配置文件中使用加密的连接字符串(和其他应用程序设置)。将连接字符串存储在<connectionStrings>块中,然后使用 NHibernateconnection.connection_string_name属性而不是connection.connection_string. 如果您运行的是网站而不是 Windows 应用程序,则可以使用aspnet_regiis命令行工具来加密<connectionStrings>块,同时将其余的 NHibernate 设置保留为纯文本以便于编辑。

如果您的数据库平台支持,另一种策略是为您的数据库连接使用集成身份验证。这样,您(希望)不会在配置文件中以明文形式存储凭据。

于 2008-09-23T04:28:50.073 回答
6

实际上,如果您使用 SQL 或 HQL 构建查询,NHibernate 可能容易受到 SQL 注入的攻击。如果您需要这样做,请确保使用参数化查询,否则您将面临一个痛苦的世界。

于 2008-09-23T00:38:39.877 回答
3

使用专用的锁定 SQL 帐户

于 2008-09-22T19:54:21.917 回答
2

我听到的支持 sprocs 而不是 ORM 的论点之一是,他们不希望人们在数据库中做任何他们想做的事情。他们不允许对表本身进行选择/插入/更新/删除。每个操作都通过一个由 DBA 审查的程序进行控制。我可以理解这种想法的来源......尤其是当你有一群业余爱好者都把手放在你的数据库中时。

但是时代变了,NHibernate 不一样了。这是令人难以置信的成熟。在大多数情况下,它会比您的 DBA 编写更好的 SQL :)。

你仍然必须保护自己不做愚蠢的事情。正如蜘蛛侠所说:“能力越大,责任越大”

我认为让 NHibernate 能够正确访问数据库并通过其他方式(例如审计日志记录和定期备份)控制操作更为合适。如果有人做了一些愚蠢的事情,你总是可以恢复的。

于 2008-09-24T13:17:52.977 回答
1

http://weblogs.asp.net/fbouma/archive/2003/11/18/38178.aspx

于 2008-09-24T01:19:32.047 回答
1

大多数 ORM 通过创建参数化查询来处理 SQL 注入。在 NHibernate 中,如果您使用 LINQ to NHibernate 或 Criteria/Query over 编写查询的方法,则查询会自动参数化,如果您自己动态创建 HQL/SQL 查询,您会更容易使用,并且必须记住您的查询必须参数化。

于 2012-10-15T09:39:08.343 回答
0

OWASP 在 ORM 工具的上下文中提到了一种形式的 SQL 注入漏洞(并以 HQL 注入为例):http ://www.owasp.org/index.php/Interpreter_Injection#ORM_Injection

于 2011-03-08T07:54:42.797 回答