2010-09-03 17 views
6

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

क्या पूरी साइट पर एक्सएसएस हमलों को आसानी से रोकने के लिए कोई तरीका है (सीएफ या जेएस में)?

+1

नोट सब्सक्राइब करना चाहिए कि आप इसे सर्वर साइड प्रोग्रामिंग भाषा/ढांचे का उपयोग कर, का उपयोग नहीं रोकना चाहते हैं ग्राहक पक्ष एक (जेएस की तरह)। क्लाइंट साइड भाषाएं क्लाइंट द्वारा अक्षम, अक्षम और धोखा देने योग्य हैं। – BalusC

+0

कृपया देखें: दुर्भाग्यवश, http://www.petefreitag.com/item/759.cfm – Henry

उत्तर

35

मैं तुम्हें करने के लिए इसे बाहर तोड़ने के लिए नफरत है, लेकिन -

  1. XSS एक आउटपुट समस्या है, नहीं एक इनपुट समस्या। फ़िल्टरिंग/इनपुट को मान्य करना रक्षा की एक अतिरिक्त परत है, लेकिन यह आपको XSS से पूरी तरह से सुरक्षित नहीं रख सकता है। XSS cheatsheet by RSnake पर एक नज़र डालें - फ़िल्टर से बचने के लिए बहुत सारे तरीके हैं।
  2. विरासत आवेदन को ठीक करने का कोई आसान तरीका नहीं है। आपको अपने एचटीएमएल या जावास्क्रिप्ट फाइलों में जो कुछ भी डाला गया है उसे ठीक से एन्कोड करना होगा, और इसका मतलब यह है कि एचटीएमएल उत्पन्न करने वाले कोड के हर टुकड़े पर फिर से जाना चाहिए।

XSS को रोकने के तरीके के बारे में जानकारी के लिए OWASP's XSS prevention cheat sheet देखें।


नीचे दी गई कुछ टिप्पणियां बताती हैं कि इनपुट सत्यापन समय के दौरान एन्कोडिंग/एस्केपिंग की बजाय बेहतर रणनीति है। मैं सिर्फ OWASP's XSS prevention cheat sheet -

परंपरागत रूप से, अविश्वसनीय डेटा को संभालने के लिए इनपुट सत्यापन पसंदीदा तरीका रहा है। हालांकि, इनपुट सत्यापन इंजेक्शन हमलों के लिए एक अच्छा समाधान नहीं है। सबसे पहले, गंतव्य मान्यता मिलने से पहले डेटा प्राप्त होने पर इनपुट सत्यापन किया जाता है। इसका मतलब है कि हम नहीं जानते कि लक्ष्य दुभाषिया में कौन से वर्ण महत्वपूर्ण हो सकते हैं। दूसरा, और संभवतः और भी महत्वपूर्ण बात यह है कि अनुप्रयोगों को संभावित रूप से हानिकारक पात्रों को अनुमति देना चाहिए। उदाहरण के लिए, क्या श्रीमान O'Malley को डेटाबेस में पंजीकरण करने से रोका जाना चाहिए क्योंकि एसक्यूएल 'विशेष चरित्र' मानता है?

विस्तृत करने के लिए - जब उपयोगकर्ता O'Malley की तरह स्ट्रिंग में प्रवेश करता है, तो आप नहीं जानते कि आपको जावास्क्रिप्ट में या HTML या किसी अन्य भाषा में उस स्ट्रिंग की आवश्यकता है या नहीं। यदि जावास्क्रिप्ट में है, तो आपको इसे O\x27Malley के रूप में प्रस्तुत करना होगा, और यदि यह HTML में है, तो यह O'Malley जैसा दिखना चाहिए। यही कारण है कि यह अनुशंसा की जाती है कि आपके डेटाबेस में स्ट्रिंग को संग्रहीत किया जाना चाहिए जिस तरह से उपयोगकर्ता दर्ज करता है, और फिर आप स्ट्रिंग के अंतिम गंतव्य के अनुसार उचित रूप से बच जाते हैं।

+0

आप किस बारे में बात कर रहे हैं? इससे कोई फर्क नहीं पड़ता कि आप इनपुट या आउटपुट पर फ़िल्टर करते हैं। आखिरकार यदि आपने इनपुट पर फ़िल्टर किया है, तो आउटपुट ठीक रहेगा या आप इसे कच्चे स्टोर कर सकते हैं और इसे हर अनुरोध पर फ़िल्टर कर सकते हैं जो अपमानजनक लगता है। – Klinky

+4

@ क्लिंकी - मेरी अपडेट की गई प्रतिक्रिया देखें। इनपुट फ़िल्टरिंग * मदद करता है *, लेकिन एक्सएसएस के लिए एक निश्चित शॉट समाधान नहीं है। –

+0

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

0

ColdFusion 9 Livedocs "स्क्रिप्टप्रोटेक्ट" नामक एक सेटिंग का वर्णन करता है जो आपको ठंडेपन की सुरक्षा का उपयोग करने की अनुमति देता है। मैंने अभी तक इसका उपयोग नहीं किया है, इसलिए मुझे यकीन नहीं है कि यह कितना प्रभावी है।

हालांकि, यदि आप किसी तृतीय-पक्ष या इसे संभालने की अपनी स्वयं की विधि को लागू करते हैं, तो संभवतः आप इसे "ऑनरक्वस्ट स्टार्ट" ईवेंट में डाल देना चाहते हैं ताकि इसे पूरी साइट को संभालने की अनुमति मिल सके। यूआरएल और फॉर्म स्कोप उल्लंघन (क्योंकि हर अनुरोध उस कोड को निष्पादित करेगा)।

+3

बहुत प्रभावी नहीं है। – Henry

1

एक चीज जो आपको देखना चाहिए उसे पोर्टकुलिस: http://www.codfusion.com/blog/page.cfm/projects/portcullis जैसे अनुप्रयोग फ़ायरवॉल को कार्यान्वित करना है जिसमें एक बहुत मजबूत प्रणाली शामिल है, तो निर्मित स्क्रिप्ट संरक्षित जिसे आसानी से पराजित किया जाता है।

ये कई हमलों को रोकने के लिए एक अच्छा प्रारंभिक बिंदु है, लेकिन एक्सएसएस के लिए आप हाथ से जा रहे हैं और यह सत्यापित कर रहे हैं कि आप HTMLEditFormat() जैसी किसी भी आउटपुट पर क्लाइंट साइड या क्लाइंट डेटा द्वारा छुआ जा सकते हैं वैध एचटीएमएल/जेएस कोड आउटपुट को रोकने के लिए।

0

सभी ColdFusion गर्म फिक्स और पैच आप भी कर सकते हैं लागू करने के अलावा:

  1. पूर्ण नहीं सबूत लेकिन मदद करता है,> "वैश्विक स्क्रिप्ट सुरक्षा सक्षम करें"
  2. को CSRFToken जोड़े CFADMIN> सेटिंग के अंतर्गत निम्नलिखित सेट अपने रूपों http://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet
  3. चेक http Referer
  4. आपके प्रश्नों
  5. ०१२३५१६४१० के लिए सभी उपयोगकर्ता इनपुट के लिए मान्यता जोड़े
  6. उपयोग cfqueryparam
  7. जोड़ें HTMLEditFormat() किसी भी outputs पर
  8. पीटर फ़्रेटैग उत्तम ब्लॉग के अलावा आप भी करने के लिए जेसन डीन http://www.12robots.com
संबंधित मुद्दे