सरल उत्तर यह है कि आप स्ट्रिंग की तुलना में किसी भी अन्य रूप में पैरामीटर नहीं प्राप्त कर सकते हैं। कम से कम, मानक सर्वलेट एपीआई का उपयोग नहीं कर रहा है। लेकिन कुछ संभव "आउट हो जाओ" हैं।
तुम सच में बदसूरत पाने के लिए तैयार कर रहे हैं, तो आप वास्तव में स्ट्रिंग वस्तु की अमूर्त तोड़ सकते हैं, और में पहुंच सकते हैं और पात्रों के ऊपर लिख। (यदि आप नियमों को तोड़ने के लिए तैयार हैं तो स्ट्रिंग वास्तव में उत्परिवर्तनीय हैं। यह कुछ स्थितियों में से एक है जहां इसे उचित ठहराया जा सकता है।)
आपके वेब कंटेनर के कार्यान्वयन (कहने) में एक गैर-मानक API एक्सटेंशन हो सकता है ऐसा करने के लिए HttpServletRequest
। यदि नहीं, तो आप स्रोत कोड को पकड़ने और एक जोड़ने में सक्षम हो सकते हैं। (आप एक खुला स्रोत वेब कंटेनर का उपयोग कर रहे मान लिया जाये।)
कहा करने के बाद कि, IMO जावा सुरक्षा के लिए "कोई तार" दृष्टिकोण गुमराह है, या क्या के मामले में कम से कम से अधिक रेटेड यह प्राप्त करता है।
संभावना के मुकाबले "कोई स्ट्रिंग्स" दृष्टिकोण गार्ड नहीं है कि आपके आवेदन के पता स्थान के माध्यम से कुछ ट्रैवल हो सकता है, तारों की तरह दिखने वाली चीज़ों का पता लगा सकता है, और संभव पासवर्ड को बाहर कर सकता है। सिद्धांत रूप में, इस के द्वारा किया जा सकता है:
- एक हैक कि JVM के निष्पादन मॉडल टूट जाता है और कच्चे स्मृति को देखता है,
- एक जावा डिबगर संलग्न और पहुंच योग्य वस्तुओं के माध्यम से trawling,
- का उपयोग कर "/ dev/mem "या बाहर से प्रक्रिया स्मृति को पढ़ने के लिए समान है,
- हार्ड ड्राइव पर एक कार्यक्रम की अदला-बदली छवि की बनी हुई है उन तक पहुंचने या
- किसी भी तरह कोर डंप करने के लिए इसे पैदा कर रहा है और डंप पढ़ने।
हालांकि, इनमें से पहले लेकिन सभी को यह आवश्यक है कि बुरे आदमी ने सिस्टम पर सुरक्षा को तोड़ दिया हो। और यदि बुरे आदमी ने ऐसा किया है कि आपके प्रोग्राम से पासवर्ड चोरी करने के लिए अन्य (शायद सरल) तरीके हैं ... जो "तार नहीं" दृष्टिकोण नहीं रोकेगा।
और यदि आप एक हैक के बारे में चिंतित हैं जो कच्चे मेमोरी को पढ़ने के लिए जावा सुरक्षा दोष का शोषण करता है, तो वह दोष शायद अन्य तरीकों से उपयोग किया जा सकता है; जैसे पासवर्ड को कोड द्वारा नियंत्रित किए जाने वाले तरीके को बदलने के लिए कोड इंजेक्ट करने के लिए।
तो संक्षेप में, "कोई तार" या तो वास्तव में मुश्किल हैक्स के खिलाफ सुरक्षा नहीं कर रहा है, या उन मामलों के खिलाफ जहां आपकी सुरक्षा पहले से ही उड़ा दी गई है। आईएमओ, यह प्रयास के लायक नहीं है ... जब तक आप सैन्य ग्रेड सुरक्षा लागू करने के लिए आवश्यक हैं।
स्रोत
2013-02-22 03:48:32
सबकुछ 1s और 0s नहीं है .. एक बाइट [] से एक सुरक्षा खतरे की एक स्ट्रिंग कैसे है? – smk
@ एसएमके: क्योंकि 'स्ट्रिंग का इंटर्न किया जा सकता है, जिसका मतलब है कि आप उनका उपयोग पूरा करने के बाद स्मृति में घूमते रहते हैं। –
@ एसएमके स्ट्रिंग्स अपरिवर्तनीय हैं। एक बार आपके पास एक बार हो जाने पर, यह स्मृति में चारों ओर लटकने जा रहा है जब तक कि यह कचरा इकट्ठा न हो जाए (जब आप इसके साथ काम कर लेंगे)। एक बार बाइट [] 'के साथ, एक बार जब आप इसके साथ काम कर लेंगे, तो आप डेटा को पढ़ने से रोकने के लिए सामग्री को ओवरराइट कर सकते हैं। – cheeken