2010-02-13 13 views
5

SQL Injection'ı önlemek için Ruby'de iyi bir yöntem nedir?SQL Injection/Good Ruby yönteminin önlenmesi

+0

Hangi kütüphaneyi kullanıyorsunuz? – sepp2k

+0

Ah, kimsenin önerdiği herhangi birini alırım. – Zombies

+0

İndirgemeden biraz şaşırdım, ancak bir web çerçevesi mi yoksa düz eski yakut nesneler mi kullanıp kullanmadığınızı belirttiğinizde yardımcı olabilir. –

cevap

7

.. verilerini yerine satır içi parametreleri bulmak için model bağlama değişkenleri kullanmak istiyorum yakut? Hazırlanan ifadeleri kullanın:

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

Buradaki sorunum, bir alanın tersine çok fazla sonuç döndüren bir sonuç döndürüyor olmasıdır… – Zombies

+0

Bu, belirli bir sorgu için hazırlanmış ifadelerin nasıl kullanılacağının sadece bir örneğidir. Sonuçlarla yaptığınız şey size kalmış. –

3

Sadece Ruby'de değil - parametrelerinizi bağlayın (veritabanında veya istemci kodunda olsun).

3

Kontrol dışarı bu kadar sahip kılavuzu: Temelde http://guides.rubyonrails.org/security.html#injection

, ayağa düz içinde

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

Evet, bu iyi görünüyor. Java'da kullandığım şeyden çok, teşekkürler. – Zombies

+3

En azından aktif kayıt hakkında konuştuğunuzdan bahsetmelisiniz. – sepp2k

+0

Ben sadece bu konuda yorum yapmak üzereydim ... benim acele, özellikle Rails/ActiveRecord için olmadığını okumak için unuttum .. bu konuda üzgünüm! –

0

Bu iplik referanslar:

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

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

activerecord en bulmak format() yöntemi

kullanılarak tarafından SQL enjeksiyon önlemek için şekillerde inşa etti

Enjeksiyondan kaçmak için böyle bir sistem var mı? sadece bir dize alıp SQL deyimiyle besleniyor gibi görünüyor. ayarlamak için params kullanılırken bu bir açığını neden olur: sipariş bu işlevinde olarak:

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

Biz order => [ '?', sort_by] ancak bunun gibi sort_by sterilize için birkaç metot denedim sadece bunu düzleştirilmiş bir dizisi gibi SQL deyimine geçirir. 'Kaçan sihir' sipariş için işe yaramaz. gsub kullanmalı mıyım? paramları sterilize etmek [: sort_by]?

İlgili konular