PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

रेल 5 एसक्यूएल इंजेक्शन

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 विधि शुरुआत और अंत में एक उद्धरण चिपकाने से ज्यादा कुछ करती है।

साथ ही, चूंकि आप कहते हैं कि आप एक आधिकारिक उद्धरण की तलाश कर रहे हैं, स्रोत कोड में टिप्पणियों से ही पता चलता है कि उपयोगकर्ता इनपुट को उद्धृत करना इन कार्यों का उद्देश्य है:

https:/ /github.com/rails/rails/blob/2471e6391dfe71cfbb8621bdf573729d961d3209/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb#L6-L13

# Quotes the column value to help prevent
# {SQL injection attacks}[http://en.wikipedia.org/wiki/SQL_injection].
def quote(value)

https:/github.com/rails/rails/blob/0f1d0b1b5254e3678abaabbebb3362a100c10262/activerecord/lib/active_record/connection_adapters/postgresql/quoting.rb#L17-L20

# Quotes strings for use in SQL input.
def quote_string(s) #:nodoc:

(नोट मैं दिखा रहा हूँ quote_string टिप्पणी के लिए, लेकिन आपको शायद quote . का उपयोग करना चाहिए , जो डेटा प्रकार का पता लगाने और कुछ उपयुक्त करने की कोशिश करता है।)

वैसे, यहां आपके लिए एक समान प्रश्न है, 2014 में मेरे द्वारा दिए गए उत्तर के साथ, और कुछ विकल्प भी:रेल में डायनेमिक बाइंडिंग के साथ कच्चे अपडेट एसक्यूएल को कैसे निष्पादित करें




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मूल मान पर वापस हस्ताक्षरित के रूप में संग्रहीत अहस्ताक्षरित पूर्णांकों को परिवर्तित करने के लिए रूबी का उपयोग करना

  2. पोस्टग्रेज array_agg ERROR:विभिन्न आयामीता के सरणियों को जमा नहीं कर सकता

  3. बहु-पंक्ति क्वेरी के लिए psql की \ copy का उपयोग करें

  4. कई-से-अनेक SQL-कीमिया और Postgresql से हटाना

  5. दो स्तंभों के संयोजन पर अद्वितीय बाधा?