2011-09-30 19 views
6

जावास्क्रिप्ट का ADsafe सबसेट कुछ चीजें, जैसे eval, window, this, with, और इतने पर है कि करने के लिए उपयोग किया है अतिथि कोड के लिए सुरक्षित नहीं हैं का उपयोग प्रतिबंधित है। यह आसान निर्धारित करने के लिए बनाने के लिएजावास्क्रिप्ट में बुराई के लिए तिथियों और यादृच्छिक संख्याओं का उपयोग कैसे किया जा सकता है?

का दिनांक और math.random

गैर नियत के इन स्रोतों तक पहुंच क्रम में प्रतिबंधित है:

किसी कारण के लिए, यह भी Date वस्तु और Math.random पर प्रतिबंध लगाता है विजेट कैसे व्यवहार करते हैं।

मैं अभी भी समझ में नहीं आता कि कैसे Date या Math.random का उपयोग कर द्वेष को समायोजित करेगा।

क्या आप एक कोड उदाहरण के साथ आ सकते हैं जहां Date या Math.random का उपयोग कुछ बुरा करने के लिए आवश्यक है?

+0

वे प्रतिभाशाली नहीं हैं, केवल अप्रत्याशित हैं। वे वैसे भी कहते हैं जो वे कहते हैं। – zneak

+4

बस '4' का उपयोग करें। यह यादृच्छिक होने की गारंटी है। –

+2

अच्छी तरह से, आप अपने अन्य कोड के भीतर कुछ नरक कोड छिपा सकते हैं, और इसे किसी विशिष्ट तिथि या यादृच्छिक रूप से निष्पादित कर सकते हैं, जिसे पहचानना मुश्किल होगा। निर्धारक कोड का खराब व्यवहार के लिए परीक्षण किया जा सकता है, गैर-निर्धारक कोड आसानी से नहीं। –

उत्तर

10

एक slideshow डगलस Crockford द्वारा पोस्ट की गई के अनुसार:

AdSafe की अनुमति नहीं है पहुँच Date करने के लिए या random

यह विश्वास है कि व्यवहार में परिवर्तन नहीं होगा साथ विज्ञापन सामग्री के मानवीय मूल्यांकन अनुमति देने के लिए है भविष्य। यह विज्ञापन गुणवत्ता और अनुबंध के अनुपालन के लिए है, सुरक्षा के लिए नहीं।

+0

अब मुझे आश्चर्य है कि इन दो चीजों के बिना गैर-निर्धारणा को शामिल करने का कोई तरीका नहीं है ... –

1

उनकी वेबसाइट के अनुसार, इसमें Date या Math.random शामिल नहीं है ताकि यह निर्धारित किया जा सके कि तृतीय पक्ष कोड कैसे व्यवहार करेगा। यहां समस्या Math.Random है (Date का उपयोग करके आप एक psuedo-random संख्या भी बना सकते हैं) - वे जानना चाहते हैं कि तृतीय पक्ष कोड कैसे व्यवहार करेगा और यह नहीं पता कि अगर तृतीय पक्ष कोड को यादृच्छिक संख्याओं तक पहुंच की अनुमति है।

अपने आप से, Date और Math.random सुरक्षा खतरों को उत्पन्न नहीं करना चाहिए।

3

मुझे नहीं लगता कि कोई भी उन्हें बुराई प्रति से पर विचार करेगा। हालांकि कि बोली की महत्वपूर्ण हिस्सा है:

आसान निर्धारित करने के लिए कैसे विगेट्स व्यवहार करते हैं

जाहिर Math.random() indeterminism का परिचय तो आप कभी नहीं यकीन है कि कैसे कोड प्रत्येक रन पर कैसा व्यवहार करेंगे हो सकता है।

क्या स्पष्ट नहीं है कि Date समान indeterminism लाता है। यदि आपका कोड किसी भी तरह की वर्तमान तारीख पर निर्भर है तो यह कुछ शर्तों में (फिर स्पष्ट रूप से) अलग-अलग काम करेगा।

मुझे लगता है कि यह आश्चर्य की बात नहीं है कि ये दो विधियां/वस्तुएं गैर-कार्यात्मक हैं, दूसरे शब्दों में प्रत्येक रन तर्क के बावजूद अलग-अलग परिणाम लौटा सकता है।

आम तौर पर इस अनिश्चितता से लड़ने के कुछ तरीके हैं। प्रारंभिक यादृच्छिक बीज को यादृच्छिक संख्याओं (जावास्क्रिप्ट में संभव नहीं) की सटीक उसी श्रृंखला को पुन: उत्पन्न करने और TimeProvider के साथ क्लाइंट कोड की आपूर्ति करने के बजाय इसे Date एस बनाने के बजाय अबास्ट्रक्शन की आपूर्ति करना।

1

कम से कम वे आपको उन लूप लिखने की अनुमति देते हैं जिन्हें गैर-समाप्ति नहीं दिखाया जा सकता है, लेकिन बहुत लंबे समय तक चल सकता है।

आपके द्वारा प्रदर्शित उद्धरण यह सुझाव देता है कि स्थिर विश्लेषण की एक निश्चित मात्रा (या कम से कम विचार किया जा रहा है), और ये सुविधाएं इसे अधिक कठिन बनाती हैं। आपको लगता है कि ये प्रतिबंध आपको वास्तव में कठिन-से-स्थैतिक-विश्लेषण कोड लिखने से रोकने के लिए पर्याप्त नहीं हैं।

1

मैं आपसे सहमत हूं कि यह एक अजीब सीमा है।

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

गणित का इतिहास गवाह है कि कैसे वे अपने मूल्य की गणना पर कार्यों को वर्गीकृत करने की कोशिश कर रहा एक रास्ता है कि कहीं नहीं ले जाता है ... केवल समझदार समाधान वास्तविक परिणाम (ब्लैक बॉक्स दृष्टिकोण) के आधार पर उन्हें वर्गीकृत कर रही है है।

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

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