对于我的ruby on rails项目,我有一个称为message的模型,该模型具有to字段。我想实施通配符搜索,例如,%545
将显示所有以545
结尾的消息,545%
将显示所有以545
开始的数字,{ {1}}将显示所有消息,包括%545%
。
我有一个类似545
的查询,其中Message.where("to like ?", str)
是要匹配的字符串,例如str
...等
一切正常,但我担心SQL注入攻击。因此,我想对%545, %545%, 545%
进行正则表达式匹配,以使其仅允许str
和数字通过。因此,我希望传递诸如%
之类的字符串,而不传递%545, %545%, 545%
之类的字符串。
我已经尝试过abc, %545a, a545%, %54a5%
,但这是行不通的。
谢谢。
答案 0 :(得分:0)
您正确使用了占位符,因此已经免受SQL注入攻击。 Rails将转义该模式中的任何不安全字符;您无需采取任何进一步的措施。
如果您仍然想去除数字和%
以外的字符,则可以使用Ruby的String#delete
方法:
str.delete('^1-9%')
'^1-9%'
自变量的意思是“将不是1
的每个字符删除为9
或%
。 (n.b.您不能在这里使用\d
,因为#delete
无法理解正则表达式元字符。)
请参见https://ruby-doc.org/core-2.5.3/String.html#method-i-delete。