Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Rails中的用户查询字符串_Sql_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Sql Rails中的用户查询字符串

Sql Rails中的用户查询字符串,sql,ruby-on-rails,ruby-on-rails-4,Sql,Ruby On Rails,Ruby On Rails 4,从用户处获取字符串并在查询的WHERE语句中使用它的最佳安全方法是什么 假设我有一个名为DB的模型,它包含列c1和c2。我希望用户能够给我一个字符串,比如str=“c1:value1”或str=“c1:value1,c2:value2”,以便使用它执行查找(DB.find(str))。当然,我不希望他/她能够执行SQL注入。有一种优雅的方法吗?这里要避免的最重要的事情是将用户响应直接放入where子句中。所以不要做类似DB.where(“c1=value”)的事情。相反,您可以依靠rails内置

从用户处获取字符串并在查询的
WHERE
语句中使用它的最佳安全方法是什么


假设我有一个名为DB的模型,它包含列
c1
c2
。我希望用户能够给我一个字符串,比如
str=“c1:value1”
str=“c1:value1,c2:value2”
,以便使用它执行查找(
DB.find(str)
)。当然,我不希望他/她能够执行SQL注入。有一种优雅的方法吗?

这里要避免的最重要的事情是将用户响应直接放入where子句中。所以不要做类似DB.where(“c1=value”)的事情。相反,您可以依靠rails内置的sql清理,方法如下

其中(“c1t=?”,值)

AR文档对此非常清楚。

如果字符串格式是固定的,则可以将其转换为
哈希
,然后将其应用于
#where
子句

string = "c1: value1, c2: value2"
hash = Hash[*string.split(/[,:]/).map(&:strip)]
DB.where(hash)

是否有一种优雅的方法可以使用此方法多次检查相同的值?类似于DB.where(“c1t=?或c2t=?”,value,value)(没有多次重复值)。对于sqlno,还有其他方法。谢谢