दिलचस्प पोस्ट
कस्टम एडाप्टर और फिल्टर के साथ स्वत: पूर्णतथाचित्र देखें Asp.net प्रपत्र यूआरएल रूटिंग में मार्ग की अनदेखी कैसे करें I एंड्रॉइड के लिए बाहरी लाइब्रेरी प्रोजेक्ट पर नोक्लेस डीफफाउंड एरर Django: अयोग्य रूप से कॉन्फ़िगर किया गया: SECRET_KEY सेटिंग रिक्त नहीं होनी चाहिए सेलेनियम के साथ इंडेक्स द्वारा Xpath नोड सेट के भीतर निर्दिष्ट नोड कैसे चुनना है? कैसे अज्ञात आईडी के साथ अंतराल? दिए गए समूहियड / आर्टिफैक्ट आईडी के लिए नवीनतम आर्टिफैक्ट संस्करण प्राप्त करने के लिए Nexus बाकी एपीआई का उपयोग करना अन्य धागे में व्यस्त पाश देरी EDT प्रसंस्करण NSZombie क्या है? संपर्क पर बिटमैप पारदर्शी के कुछ क्षेत्र बनाएं एंड्रॉइड स्टूडियो में केस बटन पाठ को कम नहीं कर सकते अगर आप विशेष रूप से उद्देश्य-सी में संपत्ति का उपयोग कर रहे हैं तो क्या ईवर्स को घोषित करने का कोई कारण है? पायथन आयात यांत्रिकी त्रुटि: संसाधन कॉन्फ़िगरेशन में त्रुटि एक सरणी को रखने के लिए अपेक्षित प्रतिक्रिया है लेकिन एक ऑब्जेक्ट मिला है? नई फ़ाइलों के लिए एंड्रॉइड एसडी कार्ड स्कैन करें

जेएसपी / सर्वलेट वेब अनुप्रयोग में एक्सएसएस की रोकथाम

मैं जेएसपी / सर्वलेट वेब अनुप्रयोग में एक्सएसएस हमलों को कैसे रोक सकता हूं?

Solutions Collecting From Web of "जेएसपी / सर्वलेट वेब अनुप्रयोग में एक्सएसएस की रोकथाम"

जेएसपी में जेएसपी में एक्सएसएस को रोका जा सकता है जेएसटीएल <c:out> टैग या fn:escapeXml() ईएल फ़ंक्शन, जब (पुनः) यूज़र-नियंत्रित इनपुट दिखा रहा है। इसमें अनुरोध पैरामीटर, हेडर, कुकीज, यूआरएल, बॉडी, आदि शामिल हैं जो आप अनुरोध ऑब्जेक्ट से निकालते हैं। इसके अलावा, पिछले अनुरोधों से उपयोगकर्ता-नियंत्रित इनपुट, जिसे डेटाबेस में संग्रहीत किया जाता है, को पुनःप्रदर्शित करते समय बचाया जाना चाहिए।

उदाहरण के लिए:

 <p><c:out value="${bean.userControlledValue}"></p> <p><input name="foo" value="${fn:escapeXml(param.foo)}"></p> 

यह उन वर्णों से बच जाएगा, जो प्रदान किए गए HTML जैसे < , > , " , ' और HTML / XML इकाइयों जैसे &lt; &gt; &quot; &apos; और &amp; जैसे में खराब हो सकते हैं।

ध्यान दें कि आपको जावा (सर्वलेट) कोड से बचने की आवश्यकता नहीं है, क्योंकि वे वहां पर हानिरहित हैं। कुछ प्रतिक्रिया प्रसंस्करण (जैसा कि आप जेएसपी में करते हैं) के बजाय अनुरोध प्रोसेसिंग (जैसा कि आप सबलेट या फ़िल्ट में करते हैं) के दौरान बचते हैं, लेकिन इस तरह से आपको यह खतरा हो सकता है कि डेटा को बेकार से डबल-एस्केप किया जा सकता है (जैसे &amp;amp; और अंततः &amp; यूज़र प्रस्तुत &amp; देखेंगे), या यह कि डीबी-संग्रहित डेटा अप्रभावी हो जाता है (जैसे जब JSON, CSV, XLS, पीडीएफ, आदि में डेटा निर्यात करते हैं, जिसके लिए HTML-escaping की आवश्यकता नहीं होती है बिलकुल)। आप भी सामाजिक नियंत्रण खो देंगे क्योंकि आपको अब और पता नहीं है कि उपयोगकर्ता ने वास्तव में क्या भर दिया है। आप एक साइट व्यवस्थापक होने के नाते वास्तव में जानना चाहते हैं कि कौन-से उपयोगकर्ता / आईपीएस XSS करने की कोशिश कर रहे हैं, ताकि आप आसानी से ट्रैक कर सकें उन्हें और उसके अनुसार कार्रवाई करना। अनुरोध प्रसंस्करण के दौरान से बचने के लिए केवल और केवल नवीनतम रिजॉर्ट के रूप में उपयोग किया जाना चाहिए जब संभवतः आपको कम से कम समय में बुरी तरह से विकसित लीगेसी वेब एप्लिकेशन के एक ट्रेन के मलबे को ठीक करने की आवश्यकता हो। फिर भी, आपको अंततः XSP- सुरक्षित बनाने के लिए अपनी जेएसपी फाइलों को फिर से लिखना चाहिए।

यदि आप उपयोगकर्ता-नियंत्रित इनपुट को HTML के रूप में फिर से बदलना चाहते हैं, जिसमें आप केवल HTML टैग जैसे <b> , <i> , <u> , आदि की एक विशिष्ट उपसंच की अनुमति देना चाहते हैं, तो आपको एक श्वेत सूची। आप इस के लिए जेएसयूयूयूयूयूआर की तरह एचटीएमएल पार्सर का इस्तेमाल कर सकते हैं। लेकिन, मार्कडॉन (स्टैक ओवरफ्लो पर यहां भी इस्तेमाल किया गया) जैसे एक मानवीय मार्कअप भाषा को पेश करने के लिए बेहतर है। इसके बाद आप इस के लिए सामान्य मार्कर जैसे मार्कडाउन पार्सर का उपयोग कर सकते हैं। इसमें एचटीएमएल सैनिटिज्मिंग क्षमताओं को भी बनाया है यह भी देखें मैं जावा एचटीएमएल एन्कोडर की तलाश कर रहा हूं ।

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


एक वैकल्पिक जेएसपी / सर्वलेट से जावा ईई के एमवीसी फ्रेमवर्क जेएसएएफ को माइग्रेट करना होगा। इसमें सभी जगह पर एक्सएसएस (और सीएसआरएफ!) की रोकथाम है JSF में सीएसआरएफ, एक्सएसएस और एसक्यूएल इंजेक्शन हमले की रोकथाम भी देखें

How-to-prevent-xss को कई बार पूछा गया है। आपको स्टैक ओवरफ्लो में बहुत सारी जानकारी मिल जाएगी इसके अलावा, ओ.डब्ल्यूएएसपी वेबसाइट में एक एक्सएसएस की रोकथाम धोखा पत्र है जिसे आपको जाना चाहिए।

उपयोग करने के लिए पुस्तकालयों पर, ओ.डब्ल्यूएएसपी के ईएसएपीआई पुस्तकालय में जावा स्वाद है। आपको यह प्रयास करना चाहिए इसके अलावा, आपके द्वारा उपयोग किए जाने वाले प्रत्येक फ्रेमवर्क में XSS के खिलाफ कुछ सुरक्षा है फिर, ओ.डब्ल्यूएएसपी वेबसाइट के पास सबसे लोकप्रिय चौखटे पर जानकारी है, इसलिए मैं उनकी साइट के माध्यम से जाने की सलाह दूंगा।

मुझे अपने सभी स्प्रिंग नियंत्रकों पर ओ.डब्ल्यूएएसपी एंटी-समी और एएसपीसीजे सलाहकार के साथ बहुत शुभकामनाएं थीं, जो एक्सएसएस को ब्लॉगर में आने से रोकते हैं।

 public class UserInputSanitizer { private static Policy policy; private static AntiSamy antiSamy; private static AntiSamy getAntiSamy() throws PolicyException { if (antiSamy == null) { policy = getPolicy("evocatus-default"); antiSamy = new AntiSamy(); } return antiSamy; } public static String sanitize(String input) { CleanResults cr; try { cr = getAntiSamy().scan(input, policy); } catch (Exception e) { throw new RuntimeException(e); } return cr.getCleanHTML(); } private static Policy getPolicy(String name) throws PolicyException { Policy policy = Policy.getInstance(Policy.class.getResourceAsStream("/META-INF/antisamy/" + name + ".xml")); return policy; } } 

आप इस stackoverflow पोस्ट से AspectJ सलाहकार प्राप्त कर सकते हैं

मुझे लगता है कि यह एक बेहतर दृष्टिकोण है, तो ग: विशेषकर यदि आप बहुत जावास्क्रिप्ट करते हैं

प्रबंधन को XSS कई मान्यताओं की आवश्यकता है, ग्राहक पक्ष से डेटा

  1. सर्वर पक्ष पर इनपुट मान्यताओं (फ़ॉर्म सत्यापन) इसके बारे में जाने के कई तरीके हैं आप JSR 303 बीन सत्यापन ( हाइबरनेट मान्यकर्ता ), या ESAPI इनपुट मान्यकरण ढांचे की कोशिश कर सकते हैं। हालांकि मैंने इसे स्वयं (अभी तक) नहीं करने की कोशिश की है, लेकिन एक एनोटेशन है जो सुरक्षित HTML (@SafeHtml) की जांच करता है आप वास्तव में वसंत MVC के साथ हाइबरनेट वैदिकेटर का उपयोग बीन के सत्यापन के लिए कर सकते हैं -> रेफरी
  2. यूआरएल अनुरोधों से बचने – आपके सभी HTTP अनुरोधों के लिए, कुछ प्रकार के XSS फ़िल्टर का उपयोग करें मैंने अपने वेब ऐप के लिए निम्नलिखित का उपयोग किया है और यह HTTP यूआरएल अनुरोध को साफ करने का ख्याल रखता है – http://www.servletsuite.com/servlet/xssflt.htm
  3. क्लाइंट में डेटा / HTML से बचने के लिए वापस आ गया (@BalusC स्पष्टीकरण पर ऊपर देखें)

मैं एक स्वचालित उपकरण का उपयोग करके नियमित रूप से कमजोरियों के लिए परीक्षण का सुझाव देता हूं और जो कुछ भी पाता है उसे फिक्सिंग करता है। सामान्य रूप से सभी एक्सएसएस हमलों के लिए विशिष्ट भेद्यता के साथ मदद करने के लिए पुस्तकालय का सुझाव देना बहुत आसान है।

Skipfish Google की ओर से एक खुला स्रोत उपकरण है जो मैं जांच कर रहा हूं: यह काफी सारी चीजों को खोजता है, और इसका उपयोग करने के योग्य लगता है

एक्सएसएस के खिलाफ बॉक्स समाधान से कोई आसान नहीं है OWASP ESAPI API का बचने के लिए कुछ समर्थन है जो बहुत उपयोगी है, और उनके पास टैग पुस्तकालय हैं

मेरा दृष्टिकोण मूल रूप से निम्नलिखित तरीकों से स्थिरता 2 टैग बढ़ाने के लिए था

  1. संशोधित करें s: संपत्ति टैग ताकि यह अतिरिक्त विशेषताओं को कह सकता है कि किस तरह से भागने की आवश्यकता है (escapeHtmlAttribute = "true" आदि)। इसमें एक नई प्रॉपर्टी और प्रॉपर्टीटैग क्लासेस बनाने की आवश्यकता है। संपत्ति वर्ग बचने के लिए OWASP ESAPI एपीआई का उपयोग करता है
  2. एस के नए संस्करण का उपयोग करने के लिए फ्रीमार्कर टेम्पलेट्स बदलें: प्रॉपर्टी और एस्केपिंग सेट करें।

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

मैंने यहां एक अधिक विस्तृत व्याख्या लिखा है

http://www.nutshellsoftware.org/software/securing-struts-2-using-esapi-part-1-securing-outputs/

मैं मानता हूं कि आदानों से बचने के लिए आदर्श नहीं है।

मेरी व्यक्तिगत राय यह है कि आपको जेएसपी / एएसपी / पीएचपी / आदि पेजों का इस्तेमाल करने से बचना चाहिए। इसके बजाए SAX के समान एपीआई के उत्पादन (केवल हैंडलिंग के बजाय कॉल करने के लिए डिज़ाइन) इस तरह से एक एकल परत है जिसकी अच्छी तरह से बनाई गई उत्पादन है।

यदि आप स्वतः प्रत्येक चर को स्पष्ट रूप से लपेटे बिना सभी जेएसपी चर को बचाना चाहते हैं, तो आप यहां पर विस्तृत विवरण के साथ एक ईएल रिज़ॉल्वर का उपयोग कर सकते हैं और एक उदाहरण (जेएसपी 2.0 या नए) , और यहां अधिक विस्तार से चर्चा की है :

उदाहरण के लिए, उपर्युक्त EL रिज़ॉल्वर का उपयोग करके, आपका जेएसपी कोड ऐसा ही रहेगा, लेकिन प्रत्येक चर स्वचालित रूप से रिज़ॉल्वर से बच जाएगा

 ... <c:forEach items="${orders}" var="item"> <p>${item.name}</p> <p>${item.price}</p> <p>${item.description}</p> </c:forEach> ... 

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

http://forum.springsource.org/showthread.php?61418-Spring-cross-site-scripting&p=205646#post205646

नोट: ईएसएल से बचने के लिए एक और तरीका है जो जेएसपी फाइलों को प्रीप्रोसेज करने के लिए एक्सएसएल ट्रांसफॉर्मेशन का उपयोग करता है यहां पाया जा सकता है:

http://therning.org/niklas/2007/09/preprocessing-jsp-files-to-automatically-escape-el-expressions/