2009-08-12 11 views
6

रेल पर रूबी में एक्सएसएस को रोकने के लिए क्या अभ्यास हैं? मुझे वेब पर कई पुराने दस्तावेज़ मिलते हैं और अधिकांश समय यह उपयोगकर्ताओं से आने वाले किसी भी चर से बचने के लिए h/html_escape सहायक का उपयोग करने के बारे में था।रेल और एक्सएसएस रोकथाम पर रूबी

मैं नए डॉक्स से समझा 2.0 और इसके बाद के संस्करण है कि वहाँ संस्करण में स्वच्छ विधि कि स्वचालित रूप से माना जाता है कि दुर्भावनापूर्ण इनपुट से इनपुट की सफाई कर रहा है। क्या यह पर्याप्त है या आप अपने एप्लिकेशन को सुरक्षित करने के लिए कुछ और कर रहे हैं?

उत्तर

10

Ruby on Rails Security Guide आपकी वेबसाइट के लिए सुरक्षा तैयार करते समय रेल-विशिष्ट मुद्दों के बारे में काफी गहन है।

15

h विधि अभी भी एक स्ट्रिंग के अंदर सभी HTML से बचने का तरीका है। आपको हर जगह इस विधि का उपयोग करना चाहिए जिससे आप सामग्री को आउटपुट कर रहे हों।

<%=h @recipe.description %> 

यह व्यवहार रेल 3. में बदल जाएगी सभी उत्पादन डिफ़ॉल्ट रूप से छोड़ दिया जाएगा और आप स्पष्ट रूप से यह बच नहीं करने के लिए निर्दिष्ट करने के लिए की आवश्यकता होगी। इस बीच, यदि आप अक्सर इस h विधि का उपयोग करना भूल जाते हैं तो आप Safe ERB plugin देख सकते हैं।

sanitize विधि सामग्री से कुछ टैग चुनने का चयन करने का एक अच्छा तरीका है। उदाहरण के लिए, यदि आप उपयोगकर्ता को बोल्ड जोड़ने और लिंक जोड़ने के साथ अपने आउटपुट को इटैलिकिस करने की अनुमति देना चाहते हैं तो आप ऐसा कर सकते हैं।

<%= sanitize @recipe.description, :tags => %w[b i a], :attributes => %w[href] %> 

ओलिवर उल्लेख किया है, अधिक जानकारी के लिए Security Guide की जाँच करें।

4

जहां तक ​​सर्वोत्तम प्रथाओं, मैं निम्नलिखित की सिफारिश करेंगे:

  1. हमेशा की तरह, का उपयोग रेल (, form_for आदि) के रूप में सहायकों अगर आप अपने खुद के रूप, आप अपने आप CSRF हमलों के लिए खोलने के बारे में।

  2. एच() फ़ंक्शन का उपयोग करते समय पाठ से बच जाएगा क्योंकि यह किसी पृष्ठ पर लिखा गया है, फिर भी आप अपने डेटाबेस में सहेजे गए एक्सएसएस शोषण के साथ समाप्त हो जाएंगे। XSS_terminate प्लगइन स्ट्रिप्स इनपुट का उपयोग करके सहेजा गया है।

  3. यह न भूलें कि आपका ऐप अन्य अनुप्रयोगों (रेल, अपाचे, माईएसक्यूएल, आपकी पसंद के ओएस) के ढेर पर चल रहा है, जिनमें से प्रत्येक की अपनी सुरक्षा चिंताएं हैं।

2

रेल स्वच्छ विधि बहुत अच्छी है, लेकिन यह गारंटी नहीं है अच्छे प्रकार से निर्मित है, और इसे स्थापित बेस की वजह से काफी हमला किए जाने की संभावना है। बेहतर अभ्यास या तो html5lib (वास्तव में सबसे अच्छा, अगर सबसे तेज़ या सबसे रूबीश नहीं है) या Sanitize या Loofah

का उपयोग करना है
संबंधित मुद्दे