2010-02-13 18 views
5

Co to jest dobra metoda w Ruby, aby zapobiec SQL Injection?Zapobieganie SQL Injection/Good Ruby method

+0

Używanie jakiej biblioteki? – sepp2k

+0

Och, jakikolwiek, złapię ktokolwiek ktokolwiek poleci. – Zombies

+0

Jestem trochę zaskoczony zaniedbaniem, ale może ci pomogło, jeśli wspomniałeś, czy korzystałeś z frameworka lub używasz zwykłych starych obiektów z rubinem. –

Odpowiedz

7

w prosto rubin? użyć przygotowanych sprawozdań:

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

Mój problem polega na tym, że zwraca tablicę wyników w przeciwieństwie do pola lub coś znacznie łatwiejszego w zarządzaniu ..... – Zombies

+0

To jest tylko przykład użycia przygotowanych instrukcji dla kwerendy wyboru. To, co robisz z wynikami, należy do Ciebie. –

3

Nie tylko w Ruby - wiąż swoje parametry (czy to w bazie danych, czy w kodzie klienta).

3

Zapoznaj się z przewodnikiem muszą się na to: http://guides.rubyonrails.org/security.html#injection

Zasadniczo chcesz używać zmiennych powiązań w modelach znaleźć dane, zamiast parametrów wbudowanych ..

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

Tak, to wygląda dobrze. W zasadzie to, do czego jestem przyzwyczajony w Javie, dzięki. – Zombies

+3

Powinieneś przynajmniej wspomnieć, że mówisz o aktywnej płycie. – sepp2k

+0

Właśnie miałem skomentować to ... w moim pośpiechu, zapomniałem przeczytać, że to nie było specjalnie dla Rails/ActiveRecord .. przepraszam za to! –

0

tego wątku referencje:

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

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

znalezisko ActiveRecord za() metoda został zbudowany w taki sposób, aby uniknąć wstrzyknięcia SQL przez użyciu formatu

Czy istnieje taki system do unikania iniekcji w celu? Wydaje się, że tylko pobiera ciąg znaków i podaje go do instrukcji SQL. Powoduje to lukę przy użyciu params ustawić: porządek jak w tej funkcji:

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

Próbowaliśmy kilka metod dezynfekcji sort_by takich jak order => [ '?', sort_by] ale to właśnie przekazuje to do instrukcji SQL, takie jak spłaszczona tablica . "Uciekająca magia" nie działa na zamówienie. Należy użyć gsub! dezynfekować parametry [: sort_by]?