在Rails中保护SQL注入

时间:2014-08-24 08:07:47

标签: sql ruby-on-rails ruby-on-rails-4 sql-injection

所以..有人试图让他/她进入我的服务器..

从日志中我看到他们正在尝试做一些基于php的攻击,但我还想缓解这个......

他们正试图通过此URL注入SQL

/sign_in?t=login'+union+select+char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33)+--+

所以在Rails环境中,这就是params hash in

{"t"=>"login' union select char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33),char(38,126,33) -- "}

因为我将t参数列入白名单,这不是问题,但我想确保其他网址没问题,如果我忘记在那里列入白名单

首先,我不确定他们在这次攻击中想要达到的目的。

其次,在

Model.find params[:id]

在这种情况下Rails会清理输入吗?或者我必须自己做吗?

1 个答案:

答案 0 :(得分:0)

只要您不使用纯字符串构建自己的条件,例如:

User.where("t LIKE '%#{params[:t]}%'")

相反,它应该是此后的数组条件:

User.where("t = ?", params[:t])

我认为这在大多数Rails应用程序中都非常安全。

获得阅读:http://guides.rubyonrails.org/security.html#sql-injection

所以,如果您使用正确的Rails方法(它会照顾清洁部分),我认为您不需要自己逃避字符串。