python उपकरण पायथन के उपयोग से उपयोगकर्ता इनपुट को सैनिटाइज़ करना




माउस को परिभाषित (6)

XSS को रोकने का सबसे अच्छा तरीका यह नहीं है कि हर चीज का प्रयास करें और फ़िल्टर करें, बल्कि HTML इकाई एन्कोडिंग के बजाय। उदाहरण के लिए, स्वतः <in & lt; चालू करें। यह आदर्श समाधान है कि आपको किसी भी एचटीएमएल इनपुट को स्वीकार करने की आवश्यकता नहीं है (फोरम / टिप्पणी क्षेत्रों के बाहर जहां इसे मार्कअप के रूप में प्रयोग किया जाता है, यह एचटीएमएल को स्वीकार करने के लिए बहुत कम होना चाहिए); वैकल्पिक एन्कोडिंग के माध्यम से इतने सारे क्रमपरिवर्तन होते हैं कि कोई भी अल्ट्रा-प्रतिबंधात्मक श्वेतसूची (उदाहरण, एज़, 0- 9 उदाहरण के लिए) कुछ के माध्यम से जाने दिया जा रहा है

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

यह कहना नहीं है कि फ़िल्टरिंग अभी भी एक सर्वोत्तम अभ्यास नहीं है, लेकिन एसक्यूएल इंजेक्शन और एक्सएसएस के संदर्भ में, यदि आप पैरामीटिरिज्ड क्वेरीज़ और एचटीएमएल एंटीक एन्कोडिंग का धार्मिक रूप से उपयोग करते हैं, तो आप अधिक सुरक्षित होंगे।

पायथन-आधारित वेब अनुप्रयोग के लिए उपयोगकर्ता इनपुट को सुरक्षित करने का सबसे अच्छा तरीका क्या है? क्या XSS या SQL इंजेक्शन के हमले को रोकने के लिए HTML वर्ण और किसी भी अन्य आवश्यक वर्ण संयोजन को निकालने के लिए कोई एकल कार्य है?


संपादित करें : ब्लीच html5lib के आस-पास एक आवरण है जो कि श्वेतसूची आधारित स्राइशेटर के रूप में उपयोग करना आसान बनाता है

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

यहाँ अब मैं इसे अपने स्टैक ओवरफ्लो क्लोन के sanitize_html उपयोगिता फ़ंक्शन में उपयोग कर रहा हूं:

http://code.google.com/p/soclone/source/browse/trunk/soclone/utils/html.py

मैंने ha.ckers.org के XSS Cheatsheet में सूचीबद्ध सभी हमलों को फेंक दिया है (जो कि एक्सएमएल फॉर्मेट में उपलब्ध हैं, जो कि अजगर-मार्कडाउन 2 का उपयोग करके HTML रूपांतरण को मार्क्सडाउन करने के बाद किया जाता है और ऐसा लगता है कि ठीक है

डब्ल्यूएमडी संपादक घटक, जो वर्तमान में स्टैकवॉवरफ्लो का उपयोग करता है, एक समस्या है, हालांकि - एक्सएसएस चीटशीट हमलों का परीक्षण करने के लिए मुझे वास्तव में जावास्क्रिप्ट को निष्क्रिय करना पड़ा, क्योंकि उन्हें डब्लूएमडी में चिपकाने के लिए मुझे सचेत बक्से देने और पृष्ठ को रिक्त करना समाप्त हो गया।


मैं अब किसी भी समय वेब विकास नहीं करता, लेकिन जब मैंने किया, तो मैंने ऐसा कुछ किया:

जब कोई पार्सिंग नहीं होता है, तो मैं आमतौर पर डेटा से बचकर डाटाबेस में हस्तक्षेप न करने देता हूं, जब मैं इसे संग्रहीत करता हूं, और जब मैं इसे प्रदर्शित करता हूं, तो मैं html से छेड़छाड़ करने के लिए हर डेटाबेस से पढ़ता हूं। अजगर)।

संभावना है, अगर किसी ने html अक्षर या सामान इनपुट करने की कोशिश की है, तो वे वास्तव में चाहते थे कि टेक्स्ट के रूप में प्रदर्शित किया जाए। अगर उन्होंने ऐसा नहीं किया, तो बहुत मुश्किल है :)

संक्षेप में हमेशा से बचें जो डेटा के मौजूदा लक्ष्य को प्रभावित कर सकते हैं।

जब मुझे कुछ पार्सिंग (मार्कअप या जो भी) की आवश्यकता होती है तो मैं आमतौर पर उस भाषा को गैर-अन्तर्विभाजक रूप में html के साथ सेट करने की कोशिश करता था, इसलिए मैं अभी भी ठीक से इसे ठीक से संग्रहीत कर सकता हूं (वाक्यविन्यास त्रुटियों के लिए मान्य करने के बाद) और बिना प्रदर्शित किए html को पार्स करता हूं उपयोगकर्ता को आपके एचटीएमएल में हस्तक्षेप करने वाले डेटा के बारे में चिंता करने की आवश्यकता है।

एचईएल से बचने को भी देखें


जेफ एटवुड ने स्वयं बताया था कि स्टैक ओवरफ्लो ब्लॉग पर स्टैक ऑवरफ्लो डाइरेस्ट द्वारा उपयोगकर्ता इनपुट (गैर-भाषा-विशिष्ट शर्तों में) को कैसे प्रतिबंधित किया जाता है: http://blog..com/2008/06/safe-html-and-xss/

हालांकि, जैसा कि जस्टिन बताते हैं, अगर आप डीजेंगो टेम्प्लेट का उपयोग करते हैं या कुछ इसी तरह के होते हैं तो वे संभवत: अपने एचटीएमएल आउटपुट को सैनिटेक्ट करेंगे।

एसक्यूएल इंजेक्शन भी चिंता का विषय नहीं होना चाहिए। सभी पायथन डेटाबेस लाइब्रेरीज़ (MySQLdb, cx_Oracle, आदि) हमेशा आपके द्वारा पास किए गए मानदंडों को सैनिटेट करते हैं ये लाइब्रेरीज़ सभी पायथन के ऑब्जेक्ट-रिलेशनल मैपर्स (जैसे कि डीजेंगो मॉडल) द्वारा उपयोग किए जाते हैं, इसलिए आपको वहां स्वच्छता के बारे में चिंता करने की आवश्यकता नहीं है।


एक स्ट्रिंग इनपुट जो कि आप डेटाबेस में संग्रहीत करना चाहते हैं, उसे सुरक्षित करने के लिए (उदाहरण के लिए ग्राहक का नाम) आपको या तो बचने के लिए या स्पष्ट रूप से किसी भी उद्धरण (',') को निकाल देना चाहिए। यह प्रभावी रूप से शास्त्रीय एसक्यूएल इंजेक्शन को रोकता है जो हो सकता है यदि आप उपयोगकर्ता द्वारा पारित स्ट्रिंग से एक एसक्यूएल क्वेरी इकट्ठा कर रहे हैं

उदाहरण के लिए (यदि उद्धरण पूरी तरह से हटाने योग्य है):

datasetName = datasetName.replace("'","").replace('"',"")

यदि आप डीजेंगो की तरह एक ढांचा का उपयोग कर रहे हैं, तो फ़्रेमवर्क मानक फ़िल्टर का उपयोग करके आपके लिए यह आसानी से कर सकता है। असल में, मुझे पूरा यकीन है कि डीजेन्गा स्वचालित रूप से ऐसा करता है जब तक कि आप इसे न बताएं।

अन्यथा, मैं फॉर्म से इनपुट को स्वीकार करने से पहले कुछ प्रकार की regex सत्यापन का उपयोग करने की सलाह देता हूं। मुझे नहीं लगता कि आपकी समस्या के लिए एक रजत बुलेट है, लेकिन फिर से मॉड्यूल का उपयोग करके, आपको उस चीज़ का निर्माण करने में सक्षम होना चाहिए जो आपको चाहिए।





xss