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

发布于 2024-08-21 14:42:00 字数 30 浏览 3 评论 0原文

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

What is a good method in Ruby to prevent SQL Injection?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

顾冷 2024-08-28 14:42:00

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

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

in straight up ruby? use prepared statements:

require 'mysql'
db = Mysql.new('localhost', 'user', 'password', 'database')
statement = db.prepare "SELECT * FROM table WHERE field = ?"
statement.execute 'value'
statement.fetch
statement.close
横笛休吹塞上声 2024-08-28 14:42:00

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

Not just in Ruby - bind your parameters (be it in the database, or in your client code).

盛装女皇 2024-08-28 14:42:00

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

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

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

Check out the guide they have up on this: http://guides.rubyonrails.org/security.html#injection

Basically, you want to use bind variables in your models to find data, rather than inline parameters..

Model.find(:first, :conditions => ["login = ? AND password = ?", entered_user_name, entered_password])
◇流星雨 2024-08-28 14:42:00

根据 http://ruby.railstutorial.org/ 你可以防止 插入标签来伪造跨站请求

<%= csrf_meta_tags %>

通过在 app/views/layouts/application.html.erb 的标头中

示例的直接链接

According to http://ruby.railstutorial.org/ you can prevent Cross Site Request Forgery by inserting the

<%= csrf_meta_tags %>

tag in the header of app/views/layouts/application.html.erb.

Direct link of example

十雾 2024-08-28 14:42:00

该线程引用:

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

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

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

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

是否有这样的系统可以按顺序转义注入?看来
只获取一个字符串并将其提供给 SQL 语句。这会导致
使用 params 设置 : order 时的漏洞,如下函数所示:

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

我们尝试了一些方法来清理 sort_by,例如 order =>; [‘?’,
sort_by] 但它只是将其传递给 SQL 语句,就像扁平化的一样
大批。 “逃脱魔法”对秩序不起作用。我应该使用
gsub!清理 params[:sort_by]?

This thread references:

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

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

ActiveRecord's find() method has built in ways to avoid SQL injection by
using the format

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

Is there any such system for escaping injection in order? It seems to
only take a string and feed it to the SQL statement. This causes a
vulnerability when using params to set : order as in this function:

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

We've tried a few methods to sanitize sort_by such as order => ['?',
sort_by] but it just passes that to the SQL statement like a flattened
array. The 'escaping magic' does not work for order. Should I use
gsub! to sanitize params[:sort_by]?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文