2010-02-13 12 views
5

एसक्यूएल इंजेक्शन को रोकने के लिए रूबी में एक अच्छी विधि क्या है?एसक्यूएल इंजेक्शन/गुड रूबी विधि को रोकना

+0

किस पुस्तकालय का उपयोग कर? – sepp2k

+0

ओह कोई भी, मैं जो भी सिफारिश करता हूं उसे पकड़ लेगा। – Zombies

+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 
+0

इसके साथ मेरी समस्या यह है कि यह किसी क्षेत्र या किसी और अधिक प्रबंधनीय के विपरीत परिणाम की एक श्रृंखला देता है ..... – Zombies

+0

यह सिर्फ एक उदाहरण है कि एक चयनित क्वेरी के लिए तैयार कथन का उपयोग कैसे करें। आप परिणामों के साथ क्या करते हैं आप पर निर्भर है। –

3

न केवल रूबी में - अपने पैरामीटर को बांधें (डेटाबेस में या अपने क्लाइंट कोड में)।

3

गाइड वे इस पर है की जाँच करें: http://guides.rubyonrails.org/security.html#injection

मूल रूप से, आप अपने मॉडल में बाँध चर का उपयोग करने के लिए डेटा के बजाय इनलाइन मापदंडों लगाना चाहते हैं ..

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

हाँ, यह अच्छा लग रहा है। जावा में मुझे बहुत कुछ उपयोग किया जाता है, धन्यवाद। – Zombies

+3

आपको कम से कम उल्लेख करना चाहिए कि आप सक्रिय रिकॉर्ड के बारे में बात कर रहे हैं। – sepp2k

+0

मैं इस पर टिप्पणी करने वाला था .. मेरे जल्दबाजी में, मैं यह पढ़ना भूल गया कि यह विशेष रूप से रेल/एक्टिव रिकार्ड के लिए नहीं था .. इसके बारे में खेद है! –

-1

http://ruby.railstutorial.org/ के अनुसार आप अनुप्रयोग/विचारों/लेआउट/application.html.erb के शीर्षक में

<%= csrf_meta_tags %> 

टैग डालने से क्रॉस साइट रिक्वेस्ट फोर्जरी रोका जा सकता है।

Direct link of example

+4

वेब ढांचे के साथ काम करने वालों के लिए अच्छा विचार, लेकिन एसक्यूएल इंजेक्शन! = एक्सएसएस – Zombies

0

यह धागा संदर्भ:

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

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

ActiveRecord की ढूंढें() विधि द्वारा तरीके एसक्यूएल इंजेक्शन से बचने के लिए बनाया गया है प्रारूप

का उपयोग कर

क्या इंजेक्शन से बचने के लिए ऐसी कोई व्यवस्था है? ऐसा लगता है कि केवल एक स्ट्रिंग लेता है और इसे SQL कथन में फ़ीड करता है। इस समारोह में के रूप में आदेश:: यह जब पैरामीटर का उपयोग कर स्थापित करने के लिए एक जोखिम का कारण बनता है [ '?', sort_by]

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

हम के रूप में आदेश => लेकिन यह इस तरह के sort_by को साफ़ करने में कुछ तरीकों की कोशिश की है बस एसक्यूएल स्टेटमेंट को एक flattened सरणी की तरह गुजरता है। 'बच निकलने वाला जादू' आदेश के लिए काम नहीं करता है। क्या मुझे gsub का उपयोग करना चाहिए! पैराम्स को स्वच्छ करने के लिए [: sort_by]?

संबंधित मुद्दे