【问题标题】:What are best practices to implement security when using NHibernate?使用 NHibernate 时实现安全性的最佳实践是什么?
【发布时间】:2010-09-12 03:22:46
【问题描述】:

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

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

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

【问题讨论】:

    标签: security nhibernate orm data-access


    【解决方案1】:

    保护您的连接字符串。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我猜你的意思是,尽可能使用 Criteria 和 Expression 模式而不是 HQL。我的印象是 HQL 本身是参数化的——你有显示 HQL 如何用于注入的链接吗?
      • HQL 已参数化。您只是无法在 HQL 中连接字符串,或者您正在做与 SQL 相同的事情。
      【解决方案3】:

      使用专用的、锁定的 SQL 帐户

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

        • +1 这正是我想说的,说得好(当然除了蜘蛛侠评论:P)
        • 在自动生成的 SQL 语句的上下文中这很好,但在编写自己的 HQL 查询时仍然需要小心并遵循一般的最佳实践。
        • 我真的不确定你从哪里得到这样的想法,即 NHibernate 可以编写比 DBA 更好的 sql,我不是 DBA,我可以编写比 NHibernate 生成的更好(更高效)的 SQL SQL。
        【解决方案5】:
        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-03-17
            • 1970-01-01
            • 2017-09-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-06
            • 1970-01-01
            相关资源
            最近更新 更多