2009-10-18 5 views
8

मुझे पता है कि मैं आउटपुट को स्वच्छ करने के लिए अपने विचारों में एक्शन व्यू हेल्पर strip_tags विधि का उपयोग कर सकता हूं, लेकिन मेरे डीबी पर बने रहने से पहले उपयोगकर्ता इनपुट को स्वच्छ करने का सबसे अच्छा तरीका क्या है? क्या मुझे अपने नियंत्रक में व्यू हेल्पर शामिल करने और स्ट्रिप_टैग विधि का पुन: उपयोग करने का कोई तरीका मिलना चाहिए? मैंने सोचा कि रेल कुछ इस तरह कुछ करने के लिए वैश्विक रूप से उपलब्ध होगा।रेलों में इनपुट एक्सएसएस और एचटीएमएल इनपुट को स्वच्छ करें

उत्तर

4

xss_terminate प्लगइन के बारे में क्या? http://wonko.com/post/sanitize

+3

2 साल बाद और दो टिप्पणियों के साथ कोई टिप्पणी नहीं - टिप्पणियां कम से कम अन्य उपयोगकर्ताओं के लिए चीजों को और स्पष्ट करने में मदद करेंगी। नोट: उत्तर के समय हम रेल 2 का उपयोग कर रहे थे और चीजें उतनी महान नहीं थी जितनी वे अब हैं! –

-1

आपको उपयोगकर्ता के इनपुट को स्वच्छ करने की आवश्यकता क्यों है?

आमतौर पर, जो कुछ भी आवश्यक है, वह उपयोगकर्ता के इनपुट की कठोर, संदर्भ-जागरूक एन्कोडिंग/भागने से होता है जब भी आप इसे प्रिंट करते हैं या इसे आउटपुट के बड़े ब्लॉक में एम्बेड करते हैं।

+0

कोई समस्या नहीं है जो आपके डेटाबेस में बस दुर्भावनापूर्ण कोड छोड़ रहा है। वेब अनुप्रयोगों में एकाधिक हमले वैक्टर पहले से ही आम जगह हैं और यह ठीक करने के लिए एक आसान चीज़ की तरह लगता है, आईएमओ। गहराई में रक्षा, या पता है? – phreakre

+0

रेल 3 सही दृष्टिकोण लेता है। यह एचटीएमएल में स्वचालित रूप से एचटीएमएल से बाहर निकलता है (उपयोगकर्ता द्वारा इनपुट डेटा सहित), उन विशिष्ट वस्तुओं को छोड़कर जो प्रोग्रामर इंगित करता है वे पहले ही एचटीएमएल-सुरक्षित हैं। रेल 3 गहराई से रक्षा करता है, और यह सही और कठोर तरीके से करता है, डेटा सही जगह पर और सही समय से बच निकला है। – yfeldblum

0

शायद मणि स्वच्छ? यह भी कोई समझ नहीं आता है! आप हमेशा इनपुट (इनपुट) को आउटपुट करना चाहते हैं, इनपुट नहीं, क्योंकि स्वच्छता का अर्थ उस संदर्भ पर निर्भर करता है जिसमें आप सामग्री का उपयोग कर रहे हैं। किसी भी संदर्भ में ऐसी स्ट्रिंग जैसी कोई चीज नहीं है। आप अपने डेटाबेस में उलझन वाले तारों का एक गुच्छा नहीं चाहते हैं जो आज भी आपका उपयोग कर रहे किसी भी परिदृश्य में "सुरक्षित" हैं, क्योंकि कल, आप उनके साथ कुछ अलग करना चाहेंगे। यदि आपकी प्रस्तुति परत सही चीज कर रही है (संदर्भ के आधार पर सामग्री से बचें), तो आप ठीक हैं, इससे कोई फर्क नहीं पड़ता कि कितने उद्धरण, बैकस्लाश या ड्रॉप टेबल स्टेटमेंट उनमें हैं।

-1

क्यों आप उपयोगकर्ता इनपुट को साफ़ करने में चाहते हैं:

+0

कुछ मामलों में यह डेटाबेस में संग्रहीत करने से पहले उपयोगकर्ता इनपुट को "sanitize" करने के लिए समझ में आता है। उदाहरण के लिए, यदि कोई उपयोगकर्ता अपना अंतिम नाम "

स्मिथ

" में दर्ज करता है, तो डेटाबेस में HTML टैग को स्टोर करने का अर्थ नहीं है। इस मामले में, डेटाबेस में अंतिम नाम सहेजने से पहले एचटीएमएल टैग को पट्टी करना अच्छा होता है। –

+0

इंजेक्शन (एक्सएसएस और एचटीएमएल) से संबंधित मूल प्रश्न, इस मामले में मुझे लगता है कि स्वच्छता * हमेशा * worng है। लेकिन अगर आपको किसी भी तरह स्ट्रिंग में कचरा मिल गया है, तो क्या संभावना है कि स्वच्छता कचरा ढूंढने जा रही है? एल्गोरिदम के लिए यह पता लगाना मुश्किल है कि कौन सा हिस्सा है और नाम नहीं है। उदाहरण के लिए, एक HTML इकाई का एम्पर्सेंड हिस्सा कब होता है, और यह "स्मिथ एंड वेसन" जैसे नाम का हिस्सा कब होता है? बहुत जल्द, आप इसके साथ समाप्त हो जाते हैं: http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ – Enno