这个来自Rails的代码片段是否容易受到sqli的攻击?如果是的话,有效载荷是多少?

时间:2015-10-22 18:55:00

标签: ruby-on-rails ruby-on-rails-3 security sql-injection

我曾经使用PHP和Prepared语句,现在当我从rails查看以下代码时(因为我是一个新的rails并且不确定语法和东西),我想知道代码是否容易出现到SQLI注入

代码段(控制器),param q是搜索框中的值:

def index
    query = %w(% %).join params[:q].to_s.gsub('%', '\\%').gsub('_', '\\_')
    @posts = Post.where("name LIKE ? OR body LIKE ?", query, query).order(params[:order])
  end

由于

2 个答案:

答案 0 :(得分:2)

你拥有的是安全的。如果不是,那么它就是Rails中的一个错误。

.where接受多种格式的条件。一个是原始字符串。如果你自己构建了这个字符串,那么所有的赌注都会被关闭,你很容易受到攻击。

正如最近的一些文件所说:

  

请注意,从用户输入构建您自己的字符串可能会泄露您的   如果操作不当,应用于注入攻击。作为一个   另外,建议使用以下方法之一。

换句话说,所有“跟随”(所有其他支持方式)的做事方式都可以。

因此,如果您使用字符串参数以外的任何内容进行.where,那么您应该没问题。

答案 1 :(得分:2)

只要您不在where条款中进行插值,就应该是安全的。 SQL注入代码here

有一些很好的例子