2011-02-09 4 views
9

एक आसान तरीका पूरी तरह से JVM का एक बहुत लॉक करने के लिए नहीं है:किस तरह के वेबपैप फ्लोटिंग बग से वास्तविक रूप से प्रभावित हो सकते हैं?

class runhang { 
public static void main(String[] args) { 
    System.out.println("Test:"); 
    double d = Double.parseDouble("2.2250738585072012e-308"); 
    System.out.println("Value: " + d); 
} 
} 

या, संकलक लटका:

class compilehang { 
public static void main(String[] args) { 
    double d = 2.2250738585072012e-308; 
    System.out.println("Value: " + d); 
} 
} 

यहां बताए गए: http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/

मेरा प्रश्न बहुत सरल है: किस प्रकार का अच्छी तरह से कल्पना की गई वेब एप्लिकेशन आपको पता है कि वास्तव में इससे प्रभावित हो सकता है?

दूसरे शब्दों में: किस प्रकार के वेबपैड पर हमलावर सेवा ज्ञात उस ज्ञात कमजोरी का उपयोग कर कर सकता है?

यह बुरा है, यह बहुत बुरा है। लेकिन मौद्रिक गणना के लिए फ़्लोटिंग-पॉइंट का उपयोग कर प्रोग्रामर के अलावा मुझे कई जावा-समर्थित वेबसाइटें नहीं दिखाई देती हैं जिन्हें क्रैश किया जा सकता है।

"main" prio=1 tid=0x09ab8a10 nid=0x57e9 runnable [0xbfbde000..0xbfbde728] 
     at sun.misc.FDBigInt.mult(FloatingDecimal.java:2617) 
     at sun.misc.FloatingDecimal.multPow52(FloatingDecimal.java:158) 
     at sun.misc.FloatingDecimal.doubleValue(FloatingDecimal.java:1510) 
     at java.lang.Double.parseDouble(Double.java:482) 

संपादित करें:

मैं खिलौना वैज्ञानिक एप्लेट उम्मीदवारों किया जा रहा है, लेकिन उस के अलावा देख सकते हैं ...

यहां अवरोधित धागे के एक threadump (किया का उपयोग कर "को मारने -3" लिनक्स पर) है

JVMs यहाँ बंद कर दिया:

जावा संस्करण "1.5.0_10" जावा (टीएम) 2 Runti मुझे पर्यावरण, मानक संस्करण (निर्माण 1.5.0_10-B03) जावा हॉटस्पॉट (टीएम) सर्वर वी एम (, मिश्रित मोड का निर्माण 1.5.0_10-B03)

जावा संस्करण "1.6.0_17" जावा (टीएम) एसई रनटाइम पर्यावरण (निर्माण 1.6.0_17-B04) जावा हॉटस्पॉट (टीएम) सर्वर वीएम स्पष्ट राज्य के लिए (निर्माण 14.3-B01, मिश्रित मोड)

+0

(मैं इसे एक समुदाय विकी में कैसे बदलूं?) – SyntaxT3rr0r

+2

कुछ भी ऐसा लगता है जो मूर्खतापूर्ण है उपयोगकर्ता द्वारा दर्ज स्ट्रिंग मान को डबल में परिवर्तित किया जा सकता है। –

+0

यह वास्तविक सवाल नहीं है? कोई इसे बंद करने के लिए कैसे मतदान कर सकता है? – SyntaxT3rr0r

उत्तर

7

नफरत है, लेकिन उपयोगकर्ता देता है कि सभी आवेदन स्ट्रिंग "2.2250738585072011e- प्रस्तुत 308 ", और" पर्सनल "पर डबल पार्स को प्रभावित किया जा सकता है।

+0

पता नहीं है कि क्या आप स्पष्ट रूप से बता रहे हैं कि आपके लिए +1 या प्रश्न के लिए एक +1 है। वैसे भी मैं आसान तरीका ले रहा हूँ। –

+0

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

1

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

8

कई वेब सर्वर डबल.परसे का उपयोग करते हुए http शीर्षलेखों का पार्स हिस्सा है, इसलिए हम यहां बुनियादी ढांचे से निपट रहे हैं (कंटेनर में चलने वाले अनुप्रयोगों के साथ किसी भी समस्या के अलावा)। सर्वलेट उस अनुरोध के खिलाफ जा रहा है (स्थानीयकरण एपीआई के किसी भी के लिए एक कॉल करता है जो तब पार्स करने के लिए प्रयास करेगी

GET/HTTP/1.1 
Host: myhost 
Connection: keep-alive 
Accept-Language: en-us;q=2.2250738585072012e-308 

: तलाश बाइनरी ब्लॉग की टिप्पणी आप एक उदाहरण के रूप निम्नलिखित के लिए लिंक भाषा शीर्षलेख), उपर्युक्त सर्वर को नीचे लाएगा।

तो हाँ, यह एक बहुत बड़ी समस्या है। हमले की सतह काफी बड़ी है, और परिणाम काफी अधिक हैं।

+2

+1। ZOMG। यह ** विशाल ** है। अधिकांश लोगों की तुलना में हूगर (विशेष रूप से जावा fanbois ... मुझे गलत मत समझो: मैं * प्यार * जावा) एहसास। – SyntaxT3rr0r

4

टोमकैट के सभी संस्करणों को "स्वीकार्य-भाषा" स्थिति को संभालने के लिए पैच और रिलीज़ किया गया है।

ओरेकल एक गर्म फिक्स यहां पाया जा सकता है जो जारी किया है:

http://www.oracle.com/technetwork/java/javase/fpupdater-tool-readme-305936.html

हॉटफिक्स जावा 1.4, 1.5, और 1.6 के लिए काम करेंगे।

+0

zomg। यह एक "सीपीयू" (गंभीर पैच अपडेट) भी नहीं है। यह एक हॉटफिक्स है। यह वॉल्यूम बोलता है कि अधिकांश जावा वेबसर्वर कितने कमजोर हैं। – SyntaxT3rr0r

0

मैं समझता हूं कि यह संख्या केवल संख्याओं में से एक है जो अनुप्रयोगों को क्रैश करेगी लेकिन टिप्पणी करने का विरोध नहीं कर सका, अंतिम 4 अंकों की जांच करें। 2012, यह संख्या की मात्रा, प्राचीन पूर्वानुमानित डूम्सडे बोलता है, और हमारे आधुनिक अनुप्रयोग एक क्रैशिंग थ्रेसहोल्ड पर इंगित कर रहे हैं जब तक कि निश्चित :-)

संबंधित मुद्दे