2012-12-24 9 views
10

मैं उपयोगकर्ता को पाठ इनपुट में सरल गणना करने की अनुमति देना चाहता हूं, ताकि 2 * 5 टाइप करने के परिणामस्वरूप 10 हो। मैं सबकुछ बदल रहा हूं लेकिन अंकों को खाली स्ट्रिंग के साथ बदल रहा हूं और फिर eval() का उपयोग करके गणना कर सकता हूं। यह मैन्युअल रूप से पार्सिंग करना आसान और संभवतः तेज़ लगता है।इनपुट में सरल गणना के लिए जावास्क्रिप्ट eval() सुरक्षित का उपयोग कर रहा है?

अक्सर यह कहा जा रहा है कि eval() असुरक्षित है, इसलिए मैं सुनना चाहता हूं कि इस स्थिति में इसका उपयोग करने का कोई खतरा या कमी है।

function (input) { 
    value = input.value.replace(/[^-\d/*+.]/g, ''); 
    input.value=eval(value); 
} 
+5

'var value' * sigh * – katspaugh

+2

और फिर आप लोग पूछेंगे कि क्यों' 2 + 2e-3' परिणाम '2.002' के बजाय' 1'। अमान्य इनपुट के बारे में लोगों को चेतावनी दें, चुपचाप इसे फेंक न दें। और मूल्यांकन को आज़माएं/पकड़ें, ताकि उपयोगकर्ता विफल होने पर उपयोगकर्ता को बता सकें। – DCoder

उत्तर

7

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

1

यह सुरक्षित है क्योंकि आप इसे eval में रखने से पहले इनपुट सत्यापन कर रहे हैं।

के अलावा आप भी जोड़ना चाहिए:

()%

+3

यह * सत्यापन * नहीं है, यह * फ़िल्टरिंग * है। – DCoder

+0

मैंने नहीं जोड़ा() क्योंकि 1() कंसोल में "फ़ंक्शन नहीं है" त्रुटि का कारण बनता है और मुझे यह देखना पसंद नहीं है; बेमिसाल ब्रेसिज़ के कारण भी मूल्यांकन विफल हो सकता है। हालांकि शायद मुझे कोशिश/पकड़ का उपयोग करना चाहिए। मॉड्यूल और अन्य पद से एक्सपोनेंट के लिए धन्यवाद। –

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