代码之家  ›  专栏  ›  技术社区  ›  Zombies

防止SQL注入/良好的Ruby方法

  •  5
  • Zombies  · 技术社区  · 15 年前

    Ruby中防止SQL注入的好方法是什么?

    5 回复  |  直到 15 年前
        1
  •  7
  •   Mike Sherov    15 年前

    直接的红宝石?使用准备好的语句:

    require 'mysql'
    db = Mysql.new('localhost', 'user', 'password', 'database')
    statement = db.prepare "SELECT * FROM table WHERE field = ?"
    statement.execute 'value'
    statement.fetch
    statement.close
    
        2
  •  3
  •   davek    15 年前

    不仅仅是在Ruby中—绑定参数(无论是在数据库中,还是在客户机代码中)。

        3
  •  3
  •   Dan McNevin    15 年前

    看看他们在这方面的指南: http://guides.rubyonrails.org/security.html#injection

    基本上,您希望在模型中使用绑定变量来查找数据,而不是内联参数。

    Model.find(:first, :conditions => ["login = ? AND password = ?", entered_user_name, entered_password])
    
        4
  •  0
  •   Pixic    12 年前

    根据 http://ruby.railstutorial.org/ 您可以通过插入

    <%= csrf_meta_tags %>
    

    在app/views/layouts/application.html.erb的标题中标记。

    Direct link of example

        5
  •  0
  •   A.lakkantha    8 年前

    此线程引用:

    http://www.ruby-forum.com/topic/90258#new

    http://www.ruby-forum.com/topic/82349#143790

    ActiveRecord的find()方法内置了避免SQL注入的方法 使用格式

     >  :conditions => [ "user_name = ?", user_name]
    

    有没有这样的系统可以有序地逃离注射?似乎 只接受一个字符串并将其馈送到SQL语句。这会导致 使用params设置时的漏洞:与此函数中的顺序相同:

         def list
    sort_by = params[:sort_by]
    @book_pages, @books = paginate :books,
                                   :order => sort_by,
                                   :per_page => 10
        end
    

    我们尝试了一些方法来清理排序,例如order=>['?', sort_by]但它只是将其像扁平化一样传递给SQL语句 数组。“逃离魔法”对秩序不起作用。我应该用吗? GSUB!要清除参数[:排序依据]?