这是什么让来自用户的字符串,并以查询WHERE
语句中使用它的最好的和安全的方式。用户查询字符串
比方说,我有一个名为DB模式,其中包含列c1
和c2
。我希望用户能够给我一个像str="c1: value1"
或str="c1: value1, c2: value2"
这样的字符串,以便用它来执行查找(DB.find(str)
)。当然,我不希望他/她能够执行SQL注入。有没有一种优雅的方式?
这是什么让来自用户的字符串,并以查询WHERE
语句中使用它的最好的和安全的方式。用户查询字符串
比方说,我有一个名为DB模式,其中包含列c1
和c2
。我希望用户能够给我一个像str="c1: value1"
或str="c1: value1, c2: value2"
这样的字符串,以便用它来执行查找(DB.find(str)
)。当然,我不希望他/她能够执行SQL注入。有没有一种优雅的方式?
避免这里最重要的是直接把用户的响应转换成一个where子句。所以不要做像DB.where这样的东西(“c1 = value”)。相反,你可以依靠内置在SQL消毒轨道,通过执行类似
DB.where( “C1 T =?”,value)的
的AR文档是对这个真的清楚。 http://guides.rubyonrails.org/active_record_querying.html#pure-string-conditions
如果您字符串格式是固定的,那么你可以将其转换为Hash
,然后可以将其应用到#where
条款。
string = "c1: value1, c2: value2"
hash = Hash[*string.split(/[,:]/).map(&:strip)]
DB.where(hash)
有没有一种优雅的方法来检查多次使用此方法相同的值?就像DB.where(“c1 t =?OR c2 t =?”,值,值)(不重复多次)。 – badnack
用sql no。还有其他方法。谢谢。 – dandlezzz