如何将单引号替换为ruby中的反斜杠?

时间:2015-10-26 02:26:35

标签: ruby sql-injection

为了防止sql注入,我这样做了:

string = "105;' DROP TABLE Suppliers"
new_string = string.gsub("'", %q(\'))
p new_string
=> "105; DROP TABLE Suppliers DROP TABLE Suppliers"

为什么输出DROP TABLE Suppliers两次?

2 个答案:

答案 0 :(得分:1)

Ruby将\'解释为匹配后字符串($')的反向引用。所以,你在报价后用所有内容替换引号:

<space>DROP TABLE Suppliers
     V
"105;' DROP TABLE Suppliers"

这里是对匹配前变量($`)的反向引用:

string = "105;' DROP TABLE Suppliers"
new_string = string.gsub("'", %q(\`))
p new_string

--output:--
"105;105; DROP TABLE Suppliers"

我找不到任何关于ruby全局变量的反向引用的文档,所以恭喜你是红宝石的先驱。

答案 1 :(得分:1)

好消息是,事实证明你不必这样做。欲了解更多信息,请阅读下面的评论。要逃避单引号,请添加另一个单引号。所以获胜者是:

string.gsub(/'/, "''")