Ruby中防止SQL注入的好方法是什么?
答案 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的标题中的标记。
答案 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]?