2010-02-13 31 views
5

Phương pháp tốt trong Ruby để ngăn chặn SQL Injection là gì?Ngăn chặn phương pháp SQL Injection/Good Ruby

+0

Sử dụng thư viện nào? – sepp2k

+0

Ồ, tôi sẽ lấy bất cứ ai đề nghị. – Zombies

+0

Tôi hơi ngạc nhiên trước việc giảm giá, nhưng nó có thể đã giúp bạn nếu bạn đề cập đến việc bạn đang sử dụng một khung công tác web hay sử dụng các đối tượng ruby ​​cũ đồng bằng. –

Trả lời

7

trong thẳng lên ruby? sử dụng chuẩn bị phát biểu:

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

Vấn đề của tôi với điều này là nó trả về một mảng kết quả trái ngược với một trường hoặc một cái gì đó dễ quản lý hơn ..... – Zombies

+0

Đây chỉ là một ví dụ về cách sử dụng câu lệnh đã chuẩn bị cho truy vấn chọn. Những gì bạn làm với kết quả là tùy thuộc vào bạn. –

3

Không chỉ trong Ruby - ràng buộc các tham số của bạn (có thể là trong cơ sở dữ liệu, hoặc trong mã máy khách của bạn).

3

Kiểm tra hướng dẫn họ có lên trên này: http://guides.rubyonrails.org/security.html#injection

Về cơ bản, bạn muốn sử dụng các biến ràng buộc trong các mô hình của bạn để tìm dữ liệu, chứ không phải là thông số inline ..

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

Có, điều này có vẻ tốt. Khá nhiều những gì tôi đã quen với Java, cảm ơn. – Zombies

+3

Bạn nên ít nhất đề cập đến rằng bạn đang nói về hồ sơ hoạt động. – sepp2k

+0

Tôi vừa mới bình luận về điều này .. trong sự vội vàng của tôi, tôi quên đọc rằng nó không dành riêng cho Rails/ActiveRecord .. xin lỗi về điều đó! –

-1

Theo http://ruby.railstutorial.org/ bạn có thể ngăn Site Chữ thập Yêu cầu giả mạo bằng cách chèn thẻ

<%= csrf_meta_tags %> 

trong tiêu đề của app/views/layouts/application.html.erb.

Direct link of example

+4

Ý tưởng tốt cho những người làm việc với các khung công tác web, nhưng SQL Inejection! = XSS – Zombies

0

chủ đề này tham khảo:

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

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

tìm ActiveRecord() của phương pháp đã được xây dựng trong những cách để tránh SQL injection bởi sử dụng định dạng

Có bất kỳ hệ thống như vậy để thoát thuốc tiêm theo thứ tự không? Có vẻ như chỉ lấy một chuỗi và đưa nó vào câu lệnh SQL. Điều này gây ra một lỗ hổng khi sử dụng params để thiết lập: trật tự như trong chức năng này:

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

Chúng tôi đã thử một vài phương pháp để khử trùng sort_by như trật tự => [ '?', sort_by] nhưng nó chỉ chuyển cho câu lệnh SQL như một mảng phẳng. 'Phép thuật thoát' không hoạt động cho trật tự. Tôi có nên sử dụng gsub không! để khử trùng params [: sort_by]?

Các vấn đề liên quan