quote
का उपयोग करना सुरक्षित है। मैंने जवाबों को पर पढ़ा। जिस पेज से आपने लिंक किया है
, और मैं किसी को यह कहते हुए नहीं देखता कि quote
असुरक्षित है। मैं "उद्धरण" का उपयोग करने के बारे में आपका प्रश्न देखता हूं। हाँ, यदि आप केवल एक स्ट्रिंग के चारों ओर उद्धरण डालते हैं, तो यह असुरक्षित है, उदा.:
q = "SELECT * FROM users where email = '#{params[:email]}'"
लेकिन quote
. का उपयोग कर रहे हैं (विधि) ठीक है:
q = "SELECT * FROM users where email = #{connection.quote(params[:email])}"
आप कंसोल में इधर-उधर खेल सकते हैं और इसे तोड़ने की पूरी कोशिश कर सकते हैं, लेकिन मुझे नहीं लगता कि आप यह कर पाएंगे:
2.3.3 :003 > ActiveRecord::Base.connection.quote("f''oo")
=> "'f''''oo'"
यदि आप सफल होते हैं, तो मुझे यकीन है कि रेल टीम (निजी तौर पर) जानना चाहेगी! लेकिन जैसा कि आप देख सकते हैं, quote
विधि शुरुआत और अंत में एक उद्धरण चिपकाने से ज्यादा कुछ करती है।
साथ ही, चूंकि आप कहते हैं कि आप एक आधिकारिक उद्धरण की तलाश कर रहे हैं, स्रोत कोड में टिप्पणियों से ही पता चलता है कि उपयोगकर्ता इनपुट को उद्धृत करना इन कार्यों का उद्देश्य है:
# Quotes the column value to help prevent
# {SQL injection attacks}[http://en.wikipedia.org/wiki/SQL_injection].
def quote(value)
# Quotes strings for use in SQL input.
def quote_string(s) #:nodoc:
(नोट मैं दिखा रहा हूँ quote_string
टिप्पणी के लिए, लेकिन आपको शायद quote
. का उपयोग करना चाहिए , जो डेटा प्रकार का पता लगाने और कुछ उपयुक्त करने की कोशिश करता है।)
वैसे, यहां आपके लिए एक समान प्रश्न है, 2014 में मेरे द्वारा दिए गए उत्तर के साथ, और कुछ विकल्प भी:रेल में डायनेमिक बाइंडिंग के साथ कच्चे अपडेट एसक्यूएल को कैसे निष्पादित करें