防止SQL注入/好Ruby方法

时间:2010-02-13 19:46:16

标签: ruby sql-injection

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

5 个答案:

答案 0 :(得分:7)

直接红宝石?使用准备好的陈述:

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

答案 1 :(得分:3)

不只是在Ruby中 - 绑定您的参数(无论是在数据库中还是在客户端代码中)。

答案 2 :(得分:3)

查看他们对此的指南:http://guides.rubyonrails.org/security.html#injection

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

Model.find(:first, :conditions => ["login = ? AND password = ?", entered_user_name, entered_password])

答案 3 :(得分:0)

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

来阻止跨站点请求伪造
<%= csrf_meta_tags %>
app / views / layouts / application.html.erb的标题中的

标记。

Direct link of example

答案 4 :(得分:0)

此主题引用:

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

我们尝试过几种方法来清理sort_by,例如order =&gt; [&#39;&#39 ;, sort_by]但它只是将它传递给SQL语句,就像展平一样 阵列。逃脱的魔法&#39;不适用于订单。我应该用吗? GSUB!消毒params [:sort_by]?