所以..有人试图让他/她进入我的服务器..
从日志中我看到他们正在尝试做一些基于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会清理输入吗?或者我必须自己做吗?
答案 0 :(得分:0)
只要您不使用纯字符串构建自己的条件,例如:
User.where("t LIKE '%#{params[:t]}%'")
相反,它应该是此后的数组条件:
User.where("t = ?", params[:t])
我认为这在大多数Rails应用程序中都非常安全。
获得阅读:http://guides.rubyonrails.org/security.html#sql-injection
所以,如果您使用正确的Rails方法(它会照顾清洁部分),我认为您不需要自己逃避字符串。