Ruby on rails Rails:允许自由文本sql过滤器,但仍避免sql注入

Ruby on rails Rails:允许自由文本sql过滤器,但仍避免sql注入,ruby-on-rails,Ruby On Rails,我有一个要求,屏幕允许用户和最终用户创建一个基本上是任何有效sql片段的过滤器。由于我无法控制的原因,这是我所需要的,因此我需要在这一边界内工作 此sql片段被附加到sql语句中的where子句中。当前,为避免发生任何错误,运行sql的登录仅限于对所需表执行选择操作 Rails(2.3)中是否有任何方法可以降低sql注入攻击的风险,但仍然允许自由文本输入,因此可以指定非常复杂的筛选条件 Cheers使用拒绝所有访问策略添加第二个连接,对特定数据库授予只读访问权限,并选择没有敏感列的表或表视图。如

我有一个要求,屏幕允许用户和最终用户创建一个基本上是任何有效sql片段的过滤器。由于我无法控制的原因,这是我所需要的,因此我需要在这一边界内工作

此sql片段被附加到sql语句中的where子句中。当前,为避免发生任何错误,运行sql的登录仅限于对所需表执行选择操作

Rails(2.3)中是否有任何方法可以降低sql注入攻击的风险,但仍然允许自由文本输入,因此可以指定非常复杂的筛选条件


Cheers

使用拒绝所有访问策略添加第二个连接,对特定数据库授予只读访问权限,并选择没有敏感列的表或表视图。如果引入单独的模式,视图名称可以与表名称相同。当然,您的DBMS必须支持所有这些特性。一旦你做得好,DB将负责所有的安全

语法安全性很难保证-取决于数据库SQL语法特性(和bug),因为数据库有自己的sqlinjection技巧。同样,通过简单的解析器也很难正确地检测出什么是错误的,例如:[DELETE FROM],但是[SELECT*FROM X,其中的名称类似于“%DELETE FROM our records%”-最后,实现简单的ala SQL DSL解析器和将AST转换为SQL,并转义非令牌项会更容易。但仍然非常复杂,而且有风险