【发布时间】:2011-08-04 02:35:33
【问题描述】:
我有复杂的 SQL 查询。我需要安全地将参数传递给 SQL 查询。如何在不使用 activerecord 的情况下避免 sql 注入?我应该将 SQL 模型/控制器保存在哪里?有谁知道在没有 activerecord 的情况下使用 SQL Server 的良好做法?
【问题讨论】:
标签: sql ruby-on-rails parameters sql-injection
我有复杂的 SQL 查询。我需要安全地将参数传递给 SQL 查询。如何在不使用 activerecord 的情况下避免 sql 注入?我应该将 SQL 模型/控制器保存在哪里?有谁知道在没有 activerecord 的情况下使用 SQL Server 的良好做法?
【问题讨论】:
标签: sql ruby-on-rails parameters sql-injection
ActiveRecord 对此有 sanitize_sql 函数。
可以查看source code这个方法。
【讨论】:
当您绕过 ActiveRecord 时,您几乎必须手动完成所有操作。我认为您有充分的理由这样做。
ActiveRecord::Base 有以下方法:sanitize_sql_for_assignments(用于设置)和 sanitize_sql_for_conditions(用于选择)。还有一些其他的 sanitize_sql_* 可能也值得一看。两者都接受哈希(使用键作为列名)或字符串。
我可能弄错了,但要获取记录并跳过 ActiveRecord,我认为您使用 ActiveRecord::Base.connection.execute(sql) 应该从数据库连接器返回对象。检查连接器的文档以查看返回的内容以及如何使用它。
至于最佳实践,抱歉,我无法为您提供帮助 :-)
【讨论】: