के लिए जांचें मैं जानना चाहता हूं कि जावास्क्रिप्ट के माध्यम से खोजना संभव है यदि किसी कॉल को eval() में सिंटैक्स त्रुटि या अपरिभाषित चर है, तो ... मान लें कि मैं कुछ मनमाने ढंग से eval का उपयोग करता हूं जावास्क्रिप्ट उस eval के त्रुटि आउटपुट को पकड़ने का एक तरीका है?eval जावास्क्रिप्ट, सिंटैक्स त्रुटि
उत्तर
आप यह देखने के लिए जांच सकते हैं कि कोई त्रुटि वास्तव में एक सिंटेक्स त्रुटि है या नहीं।
try {
eval(code);
} catch (e) {
if (e instanceof SyntaxError) {
alert(e.message);
}
}
Mozilla documentation for eval
के अनुसार:
eval का मूल्यांकन पिछले अभिव्यक्ति की मान देता है।
तो मुझे लगता है कि आप भाग्य से बाहर हो सकते हैं। यह वही दस्तावेज़ eval
:
eval() एक खतरनाक फ़ंक्शन है, जो कॉलर के विशेषाधिकारों के साथ पारित कोड निष्पादित करता है। यदि आप एक स्ट्रिंग के साथ eval() चलाते हैं जो किसी दुर्भावनापूर्ण पार्टी से प्रभावित हो सकता है, तो आप उपयोगकर्ता के मशीन पर अपने वेबपृष्ठ/एक्सटेंशन की अनुमतियों के साथ चल रहे दुर्भावनापूर्ण कोड को समाप्त कर सकते हैं। सबसे महत्वपूर्ण बात यह है कि, थर्ड पार्टी कोड उस क्षेत्र को देख सकता है जिसमें eval() का आह्वान किया गया था, जिससे संभावित हमले हो सकते हैं जिनके समान कार्य संवेदनशील नहीं है।
इस पर ध्यान दिए बिना, कृपया इस फ़ंक्शन का उपयोग करने से पहले जोखिमों से अवगत रहें।
बुराई होने के बारे में, सुनहरा नियम: उपयोगकर्ता इनपुट को न खोलें, केवल उन्हीं तारों को निकालें जिन्हें आपने स्वयं परिभाषित किया है, उदाहरण के लिए: सर्वर से। हां, एमआईटीएम हमला, लेकिन यदि आप अपने सर्वर पर भरोसा नहीं कर सकते हैं, तो आपको बड़ी समस्याएं हैं। JSLint के लिए – CularBytes
आप http://www.jslint.com/ का उपयोग कर सकते हैं जिसमें जावास्क्रिप्ट पार्सर लिखित एन जावास्क्रिप्ट शामिल है। यह आपको आपके कोड के बारे में बहुत सारी जानकारी देगा, इसे अधिक आराम से या नहीं, आदि के लिए कॉन्फ़िगर किया जा सकता है ...
विशेष प्रकार की त्रुटि को पकड़ने के लिए प्रयास करने का प्रयास करते समय किसी को यह सुनिश्चित करना चाहिए कि अन्य प्रकार के अपवाद नहीं हैं दबा। अन्यथा यदि मूल्यांकन कोड एक अलग तरह का अपवाद फेंक देगा तो यह गायब हो सकता है और कोड के अप्रत्याशित व्यवहार का कारण बन सकता है।
मैं इस तरह कोड writting सुझाव है:
try {
eval(code);
} catch (e) {
if (e instanceof SyntaxError) {
alert(e.message);
} else {
throw(e);
}
}
कृपया ध्यान दें "और" खंड।
फेंक एक समारोह नहीं है – Dev
मुझे आश्चर्य है कि मैंने इसे स्वयं क्यों नहीं किया। आपका बहुत बहुत धन्यवाद! –
@ जेसस - तथ्य यह है कि आप सोच रहे हैं एक अच्छी बात है। वैसे भी, शुभकामनाएँ। – ChaosPandion